使用类似于我在下面给出的方法,我使用 Google Drive 文件夹中文件的“Id”属性更新其“name”属性。任务执行没有问题。
在这种情况下,文件被定位,因为它们包含在指示的文件夹中,并且不需要为它们提供任何属性。
现在正在执行一个过程,需要提供文件名(使用我在下面给出的方法)。问题在于Windows资源管理器中本地文件的名称并不是用Google Drive的所有真实字符获取的。 Windows 中的命名文件存在 Google 云端硬盘中不存在的限制。在这种环境中,甚至可以有重复的文件名,因为引用和不可变属性是“Id”。
我直接从 Windows 资源管理器中选择的文件中获取文件名,但由于该值并不总是与 Google Drive 中的实际值相对应,因此我必须排除使用此属性来定位文件。
这就是问题所在。我需要在 Windows 资源管理器中使用同一文件的文件属性,该属性也存在于 Google Drive 中。也就是说,类似 UUID 的东西。这样,传递给执行操作的方法的值将是每个文件的“UUID”,并且标识将是唯一的。
有人可以帮我找到这个所谓的“UUID”吗?
备注:
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;
}
通过这段代码,我得到了我想要的,即更新 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;
}
}