Windows 资源管理器和 Google Drive 之间的唯一文件标识符

问题描述 投票:0回答:1

使用类似于我在下面给出的方法,我使用 Google Drive 文件夹中文件的“Id”属性更新其“name”属性。任务执行没有问题。

在这种情况下,文件被定位,因为它们包含在指示的文件夹中,并且不需要为它们提供任何属性。

现在正在执行一个过程,需要提供文件名(使用我在下面给出的方法)。问题在于Windows资源管理器中本地文件的名称并不是用Google Drive的所有真实字符获取的。 Windows 中的命名文件存在 Google 云端硬盘中不存在的限制。在这种环境中,甚至可以有重复的文件名,因为引用和不可变属性是“Id”。

我直接从 Windows 资源管理器中选择的文件中获取文件名,但由于该值并不总是与 Google Drive 中的实际值相对应,因此我必须排除使用此属性来定位文件。

这就是问题所在。我需要在 Windows 资源管理器中使用同一文件的文件属性,该属性也存在于 Google Drive 中。也就是说,类似 UUID 的东西。这样,传递给执行操作的方法的值将是每个文件的“UUID”,并且标识将是唯一的。

有人可以帮我找到这个所谓的“UUID”吗?

备注:

  1. 请注意,我正在使用与 Google Drive 的同步,以便在包含我帐户的所有驱动器内容的根驱动器下以通常的方式在 Windows 资源管理器中显示远程文件夹和文件。
  2. foreach循环中,此时不考虑多个文件的存在。
public async Task CambioNombreFicheroSeleccionados(DriveService ds, ArrayList al)
{
    try
    {
        string r = "";
        foreach (var item in al)
        {
            r = r + "name = '" + item + "'";
        }
            
        if (r.Length == 0) { return; };
    
        string cadQ =  r + " and trashed = false";
    
        var drivefiles = GDrive_baj.ListFiles(ds, new GDrive_baj.FilesListOptionalParms { Q = cadQ });
    
        foreach (var driveFile in drivefiles.Files)
        {       
            string hhh = driveFile.Id;      
            var fileMetadata = new Google.Apis.Drive.v3.Data.File()
            {
                Name = Cg.ReemplazarCaracteresEspeciales(driveFile.Name)
            };
    
            var request2 = ds.Files.Update(fileMetadata, hhh);
            var results = await request2.ExecuteAsync();
        }
        return;
    }
    catch (Exception ex)
    {
        string ss = ex.Message;
    }
    return;
}
c# windows drive
1个回答
0
投票

通过这段代码,我得到了我想要的,即更新 Drive 中的文件名,并避免 Windows 资源管理器未显示的字符阻止我将显示的本地名称与 Drive 中的名称进行比较。解决方案是通过删除驱动器名称(变量中)中未显示的字符来进行比较。一旦验证它们匹配,就会执行文件名更新操作。

目前,对提供“id”的文件夹中的文件执行操作,限制为 1000 个文件。

public async Task CambioNombreFicheroSeleccionados(DriveService ds, ArrayList al)
{
   
    try
        {
        
        foreach (var item in al)
        {
            string cadQ = "parents in '1uoiI6mxvyo35HA3h9uLt_9po2UBORyq0PHyhPOSHJXTeBFf8Ox_RUEf9Q1iuW-W9I8bvY9bE' and trashed = false";
            Google.Apis.Drive.v3.FilesResource.ListRequest lr = new FilesResource.ListRequest(ds);
            lr.PageSize = 1000;
            lr.Q = cadQ;
            var results = await lr.ExecuteAsync();
            
            foreach (var driveFile in results.Files)
            {
                //replace known characters that are not displayed in the local Drive folder
                //to compare the string displayed in Windows Explorer with the actual name in the modified Drive
                string nan = driveFile.Name.ToString().Replace(":", " ");
                nan = nan.Replace("*", " ");
                nan = nan.Replace("/", " ");
                nan = nan.Replace(((char)92).ToString(), " ");  // caracter  \
                nan = nan.Replace(((char)34).ToString(), " ");  // caracter "
                nan = nan.Replace(((char)124).ToString(), " ");  // caracter |
                nan = nan.Replace("?", " ");
                nan = nan.Replace("<", " ");
                nan = nan.Replace(">", " ");
                                        
                if (nan == item.ToString())
                {
                    string Ident = driveFile.Id;
                   
                    var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                    {
                        Name = Cg.ReemplazarCaracteresEspeciales(driveFile.Name)
                    };

                    var request2 = ds.Files.Update(fileMetadata, Ident);
                    var results3 = await request2.ExecuteAsync();
                }
            }
        }
          
        }
        catch (Exception ex)
        {
            string ss = ex.Message;
        }
        
}
© www.soinside.com 2019 - 2024. All rights reserved.