我应该从谷歌驱动器下载所有pdf文件,但是当我运行代码时,相同的pdf文件将以不同的名称下载多次,例如,如果我在驱动器中有3个pdf文档,比如pdf1,pdf2, pdf3 当我尝试下载时,它将下载pdf1然后替换为pdf2并再次替换为pdf3,pdf3正在下载三次并使用不同的名称保存。
public static void Dwfiles(DriveService service)
{
// Define parameters of request.
FilesResource.ListRequest listRequest = service.Files.List();
listRequest.MaxResults = 100;
// List files.
IList<Google.Apis.Drive.v2.Data.File> files = listRequest.Execute()
.Items;
Console.WriteLine("Files:");
if (files != null && files.Count > 0)
{
foreach (var file in files)
{
//var request = service.Files.Get(file.Id);
Console.WriteLine("{0} ({1})", file.Title, file.Id);
//Debug.WriteLine("{0} ({1})", file.Title, file.Id);
Console.WriteLine("-----------------------------------------------------------");
var request = service.Files.Get(file.Id);
using (var stream = new System.IO.MemoryStream())
{
// Add a handler which will be notified on progress changes.
// It will notify on each chunk download and when the
// download is completed or failed.
request.MediaDownloader.ProgressChanged +=
(IDownloadProgress progress) =>
{
switch (progress.Status)
{
case DownloadStatus.Downloading:
{
Console.WriteLine(progress.BytesDownloaded);
break;
}
case DownloadStatus.Completed:
{
Console.WriteLine("Download complete.");
Console.WriteLine("-----------------------------------------------------------");
break;
}
case DownloadStatus.Failed:
{
Console.WriteLine("Download failed.");
break;
}
}
};
request.Download(stream);
for (int a = 0; a < files.Count; a++)
{
var filepath = @"I:\testing\downloaded11 ";
var filepath2 = filepath + (a + 1) + ".pdf";
using (var filestream = new FileStream(filepath2, FileMode.Create, FileAccess.ReadWrite))
{
filestream.Write(stream.GetBuffer(), 0, stream.GetBuffer().Length);
}
}
}
}
}
答案 0 :(得分:0)
我会考虑从
开始的条款for (int a = 0; a < files.Count; a++)
您已经在所有文件的foreach循环中:
foreach (var file in files)
修改强>
如果Google云端硬盘上有10个文件,则每次保存10个文件,每个文件都会覆盖您下载的上一个文件的10个副本。
而不是
for (int a = 0; a < files.Count; a++)
{
var filepath = @"I:\testing\downloaded11 "
var filepath2 = filepath + (a + 1) + ".pdf";
using (var filestream = new FileStream(filepath2, FileMode.Create, FileAccess.ReadWrite))
{
filestream.Write(stream.GetBuffer(), 0, stream.GetBuffer().Length);
}
}
尝试
var filepath = @"I:\testing\downloaded11\" + file.OriginalFilename;
using (var filestream = new FileStream(filepath, FileMode.Create, FileAccess.ReadWrite))
{
filestream.Write(stream.GetBuffer(), 0, stream.GetBuffer().Length);
}