我试图在谷歌驱动器中下载所有pdf文件,但未能保存位于谷歌驱动器

时间:2018-05-05 01:08:52

标签: c# .net google-drive-api

我应该从谷歌驱动器下载所有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);

                                    }

                            }

                    }

            }
        }

1 个答案:

答案 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);
    }