FileOutputStream записывает 0 байтов в Google Диск - PullRequest
0 голосов
/ 25 июня 2018

Шаг 1: Получить файл, который я хотел бы сохранить (в данном случае небольшой png).

var fileBytes = getFileBytes();

Шаг 2: Получить URI контента с Google Drive.

var intent = new Intent(Intent.ActionCreateDocument);
intent.AddCategory(Intent.CategoryOpenable);
intent.SetType(mimeType);
intent.PutExtra(Intent.ExtraTitle, fileNameWithExtension);
StartActivityForResult(Intent.CreateChooser(intent, "Select Save Location"), 43);

Шаг 3: Создайте FileOutputStream для обработки записи для поставщика контента.

protected override async void OnActivityResult (int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
    base.OnActivityResult (requestCode, resultCode, data);

    if (resultCode == Result.Canceled && requestCode == 43) {
        using (var pFD = ContentResolver.OpenFileDescriptor(data.Data, "w"))
        using (var outputSteam = new FileOutputStream(pFD.FileDescriptor))
        {
            await outputSteam.WriteAsync(fileBytes);
        }
    }
}

Этот код работает, если я сохраняю файл локально. Но когда я сохраняю файл в Google Drive, файл там, но он имеет 0 байтов. Это связано с тем, что, если я делаю это правильно, и он не работает на Google Диске, то кто знает, будет ли он работать на других контент-провайдерах.

Для ясности, он создает файл на шаге 2. Так что код на шаге 3 правильный? Опять же, это работает, если я сохраняю файл локально.

...