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

寻求Windows资源管理器与Google Drive的唯一文件标识符(类UUID)

解决Windows资源管理器中Google Drive同步文件的唯一标识问题

我之前通过文件的Id属性可以顺利更新Google Drive文件夹中文件的name属性,但现在需要执行一项依赖文件名的操作时,发现Windows资源管理器中的本地文件名无法完全对应云端真实文件名——Windows有Drive没有的命名限制,且Drive允许文件重名,唯一可靠的标识是不可变的Id属性。直接用本地文件名定位云端文件会出错,因此需要找到Windows资源管理器与Google Drive共有的类UUID属性来唯一标识文件。

可用的唯一标识属性:Google Drive ID

当你使用Google Drive桌面客户端同步文件时,每个本地同步的文件/文件夹都会在Windows系统属性中存储一个**"Google Drive ID"**属性,这个值完全对应云端Google Drive文件的Id字段,唯一且不可变,完美解决文件名不匹配的问题。

在Windows中查看该属性

打开同步文件的属性窗口 → 切换到「详细信息」标签 → 下拉找到「Google Drive ID」项,即可看到对应的云端文件ID。

C#中读取该属性的示例代码

通过Windows Shell API可以读取这个属性,实现逻辑如下:

using Shell32;
using System.IO;

public string GetGoogleDriveId(string filePath)
{
    Shell shell = new Shell();
    Folder folder = shell.NameSpace(Path.GetDirectoryName(filePath));
    FolderItem item = folder.ParseName(Path.GetFileName(filePath));
    
    // 遍历属性索引,找到"Google Drive ID"对应的项
    int googleDriveIdIndex = -1;
    for (int i = 0; i < 300; i++)
    {
        string propName = folder.GetDetailsOf(null, i);
        if (propName == "Google Drive ID")
        {
            googleDriveIdIndex = i;
            break;
        }
    }
    
    return googleDriveIdIndex != -1 ? folder.GetDetailsOf(item, googleDriveIdIndex) : null;
}

结合现有代码修改优化

获取到本地文件的Google Drive ID后,无需再通过文件名查询云端文件,直接用ID调用Drive API即可,避免文件名不匹配的问题:

public async Task CambioNombreFicheroSeleccionados(DriveService ds, List<string> localFilePaths)
{
    try
    {
        foreach (var filePath in localFilePaths)
        {
            string driveFileId = GetGoogleDriveId(filePath);
            if (string.IsNullOrEmpty(driveFileId))
                continue;
                
            var fileMetadata = new Google.Apis.Drive.v3.Data.File()
            {
                Name = Cg.ReemplazarCaracteresEspeciales(Path.GetFileName(filePath))
            };
    
            var request2 = ds.Files.Update(fileMetadata, driveFileId);
            await request2.ExecuteAsync();
        }
    }
    catch (Exception ex)
    {
        string ss = ex.Message;
    }
}

注意事项

  • 确保Google Drive桌面客户端处于正常同步状态,该属性仅在已完成同步的文件上存在。
  • 无论是"镜像文件"还是"流式传输"模式,该属性均有效,流式文件会在本地保留必要的元数据。

内容的提问来源于stack exchange,提问作者Manuel Cera Vera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:25:00