Некоторое время я пытаюсь внедрить в свой проект блок прогресса, чтобы отобразить прогресс загрузки любого файла, который я загружаю с помощью Google Drive API. Загрузка работает отлично, но я могу получить загруженные байты. Это не обязательно должно быть мгновенным, но, например, получать его за каждые 5 секунд загрузки или что-то в этом роде.
Мой текущий источник для скачивания - это:
public static void downloadFile(string filename, string fileId, string savePath, ArquivesON parentForm)
{
ArquivesON parent = parentForm;
Diretorio diretorio = new Diretorio();
var request = Program.service.Files.Get(fileId);
var stream = new System.IO.MemoryStream();
long? totalSize = Program.service.Files.Get(fileId).Execute().Size;
try
{
request.MediaDownloader.ProgressChanged += (IDownloadProgress progress) =>
{
parent.updateStatusBar("Downloading", Color.White, (progress.BytesDownloaded * 100) / totalSize);
};
request.DownloadWithStatus(stream);
SaveStream(stream, savePath + @"\" + filename);
parent.updateStatusBar("Download completed", Color.Green, 100);
stream.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "An error has ocurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
И в качестве потока, используя метод writeTo:
private static void SaveStream(System.IO.MemoryStream stream, string saveTo)
{
using (System.IO.FileStream file = new System.IO.FileStream(saveTo, System.IO.FileMode.Create, System.IO.FileAccess.Write))
{
stream.WriteTo(file);
}
}
Я также думал, что смогу добиться прогресса writeTo, но я не знаю, возможно ли это вообще, потому что я на самом деле использую этот проект для обучения и я очень новичок ie.