You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Google API在C#控制台应用中列出Google Drive所有文件(含视频)

在C#控制台应用中列出Google Drive所有文件

实现步骤

  • 在Main方法中初始化Drive服务,选择对应的授权方式(用户OAuth或服务账号)
  • 编写文件列表方法,处理API分页请求(Drive API单次最多返回1000条结果)
  • 可选:添加视频文件筛选逻辑,仅列出视频类型文件

修改后的完整代码

using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.IO;
using System.Threading;

namespace test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Program program = new Program();
            // 二选一:使用用户OAuth授权或服务账号授权
            DriveService driveService = program.GetService();
            // DriveService driveService = program.GetClient();

            if (driveService != null)
            {
                ListAllFiles(driveService);
                // 如需仅列出视频文件,替换为下面的方法调用
                // ListVideoFiles(driveService);
            }
            else
            {
                Console.WriteLine("无法初始化Drive服务");
            }

            Console.ReadLine();
        }

        // 列出Drive中所有文件(包含视频)
        private static void ListAllFiles(DriveService service)
        {
            Console.WriteLine("正在列出Google Drive所有文件:");
            Console.WriteLine("--------------------------------");

            string pageToken = null;
            do
            {
                var request = service.Files.List();
                // 指定返回字段,减少数据传输量
                request.Fields = "nextPageToken, files(id, name, createdTime, mimeType)";
                request.PageToken = pageToken;
                request.PageSize = 1000; // API单次返回上限

                var result = request.Execute();
                foreach (var file in result.Files)
                {
                    Console.WriteLine($"文件名: {file.Name}");
                    Console.WriteLine($"文件ID: {file.Id}");
                    Console.WriteLine($"创建时间: {file.CreatedTime?.ToString("yyyy-MM-dd HH:mm:ss")}");
                    Console.WriteLine($"文件类型: {file.MimeType}");
                    Console.WriteLine("--------------------------------");
                }

                pageToken = result.NextPageToken;
            } while (pageToken != null);

            Console.WriteLine("文件列表加载完成");
        }

        // 可选:仅列出视频文件
        private static void ListVideoFiles(DriveService service)
        {
            Console.WriteLine("正在列出Google Drive所有视频文件:");
            Console.WriteLine("--------------------------------");

            string pageToken = null;
            do
            {
                var request = service.Files.List();
                request.Fields = "nextPageToken, files(id, name, createdTime, mimeType)";
                request.PageToken = pageToken;
                request.PageSize = 1000;
                // 通过MIME类型过滤视频文件
                request.Q = "mimeType contains 'video/'";

                var result = request.Execute();
                foreach (var file in result.Files)
                {
                    Console.WriteLine($"文件名: {file.Name}");
                    Console.WriteLine($"文件ID: {file.Id}");
                    Console.WriteLine($"创建时间: {file.CreatedTime?.ToString("yyyy-MM-dd HH:mm:ss")}");
                    Console.WriteLine($"视频类型: {file.MimeType}");
                    Console.WriteLine("--------------------------------");
                }

                pageToken = result.NextPageToken;
            } while (pageToken != null);

            Console.WriteLine("视频文件列表加载完成");
        }

        public DriveService GetService()
        {
            ClientSecrets clientSecrets = new ClientSecrets
            {
                ClientId = "你的ClientId", // 替换为实际ClientId
                ClientSecret = "你的ClientSecret" // 替换为实际ClientSecret
            };

            string tokenPath = "Token存储路径"; // 替换为Token保存路径
            string[] scopes = { DriveService.Scope.Drive };

            UserCredential authorizedUserCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(
              clientSecrets,
              scopes,
              "user",
              CancellationToken.None,
              new FileDataStore(tokenPath, true)
            ).Result;

            return new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = authorizedUserCredential,
                ApplicationName = "你的应用名称", // 替换为实际应用名称
            });
        }

        public DriveService GetClient()
        {
            string credenitalsJSONPath = "你的私钥JSON路径"; // 替换为私钥文件路径

            using (var stream = new FileStream(credenitalsJSONPath, FileMode.Open, FileAccess.Read))
            {
                var credentials = GoogleCredential.FromStream(stream);

                if (credentials != null)
                {
                    if (credentials.IsCreateScopedRequired)
                    {
                        string[] scopes = { DriveService.Scope.Drive };
                        credentials = credentials.CreateScoped(scopes);
                    }

                    return new DriveService(new BaseClientService.Initializer()
                    {
                        HttpClientInitializer = credentials,
                        ApplicationName = "你的应用名称", // 替换为实际应用名称
                    });
                }
            }
            return null;
        }
    }
}

关键说明

  • 分页处理:利用nextPageToken循环请求,确保获取所有文件,避免因单次请求上限导致遗漏
  • 字段优化:通过request.Fields指定返回字段,减少不必要的数据传输,提升请求效率
  • 视频筛选:使用mimeType contains 'video/'作为查询条件,可匹配所有视频格式文件(如MP4、AVI等)
  • 授权选择:GetService用于用户OAuth授权(访问当前用户的Drive),GetClient用于服务账号授权(访问服务账号关联或共享的Drive文件)

内容的提问来源于stack exchange,提问作者user20317883

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:55:20