7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[C#] Google Drive API v3を使って特定のフォルダ下にあるファイルをダウンロードする

Last updated at Posted at 2018-07-29

概要

前回、[C#] Google Drive API v3を使ってGoogle Slidesを取得するを投稿したのですが、特定のフォルダ下のファイルだけダウンロードしたい時があったので備忘録としてまとめてみました。

特定のフォルダ下にあるファイルをダウンロードする

Google Drive APIでは、フォルダ含め全てのファイル再帰的に取ってきてしまうため、特定のフォルダ下にあるファイルだけが欲しい場合はリクエストパラメータのクエリ構文で指定する必要があります。
つまり、特定のフォルダIDと親フォルダのIDが一致するファイルだけを取得するように指定することが必要です。

ユーザー認証やDrive API serviceを生成する過程はGoogle Drive APIs .NET Quickstartを参照。

クエリ構文で指定するファイルの属性の一覧はGoogle Drive APIs Search for Files and Team Drivesを参照。

            // フォルダ「HogeFolder」下のファイル一覧を取得する

            // リクエストパラメータの定義
            // service(DriveService)はユーザ認証部分なので割愛
            var listRequest = service.Files.List();
            listRequest.PageSize = 1;

            // 取得するフォルダの条件をクエリ構文で指定
            listRequest.Q = "(name = 'HogeFolder') and (mimeType = 'application/vnd.google-apps.folder') and (trashed = false)";
            listRequest.Fields = "nextPageToken, files(id)";

            // フォルダIDの取得
            var folderId = listRequest.Execute().Files.First().Id;

            // フォルダ「HogeFolder」下のファイルの条件をクエリ構文で指定
            // '{folderId}' in parentsにより、フォルダ「HogeFolder」下にあるファイルとフォルダのみが対象となる
            listRequest.Q = $"('{folderId}' in parents) and (mimeType != 'application/vnd.google-apps.folder') and (trashed = false)";
            listRequest.Fields = "nextPageToken, files(id, name)";

            // ファイル一覧の取得
            var files = listRequest.Execute().Files;

            // 一番最初にとれたファイルのIDを取得する
            var id = files.First().Id;

            // 保存するファイル先を指定する
            string saveTo = "HogeFolder";
            
            // ファイルをダウンロードする
            var request = service.Files.Get(id);
            var filest = new System.IO.FileStream(Path.Combine(saveTo, files.First().Name), System.IO.FileMode.Create, System.IO.FileAccess.Write);
            request.Download(filest);    

参考

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?