Я пытаюсь загрузить все файлы PDF на диске Google, но не могу сохранить каждый файл PDF, расположенный на диске Google. - PullRequest
0 голосов
/ 05 мая 2018

Я должен загрузить все документы в формате pdf с диска Google, но при запуске кода один и тот же файл 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 голосов
/ 05 мая 2018

Я бы подумал о пункте, начинающемся

for (int a = 0; a < files.Count; a++)

Вы уже находитесь в цикле foreach всех файлов:

foreach (var file in files)

EDIT

Если на диске Google есть десять файлов, вы сохраняете каждые десять раз, каждый перезаписывая десять копий предыдущего загруженного вами файла.

Вместо

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...