gpt4 book ai didi

c# - 存储客户端列表对象

转载 作者:行者123 更新时间:2023-11-30 21:26:38 26 4
gpt4 key购买 nike

我的应用程序需要从 Google 云存储桶下载文件。

我正在使用 StorageClient ListObjects 方法从 GCS 存储桶下载文件。

ListObjects 中,我想以正则表达式格式提供文件名。

目前我正在使用以下代码。

var listFiles = storageClientVariable.ListObjects(GCSBucketName, 
folderPrefix).Where(p => Regex.IsMatch(p.Name, regexFileName));

foreach (var objectName in listFiles)
{
bucketFileName = Path.GetFileName(objectName.Name);
guidFolderPath = localPath + "\\" + bucketFileName;

FileStream fs = new FileStream(guidFolderPath, FileMode.Create);
using (fs)
{
var progress = new Progress<IDownloadProgress>(
p => { DownloadProgress(p); });
storage.DownloadObject(GCSBucketName, objectName.Name, fs, option, progress);
}
}
break;

这段代码工作正常。但是我在 Enumerable.Where 方法中传递了 regexFileName。循环遍历存储桶中存在的所有文件。那么有没有其他方法可以避免额外的循环?或者有没有更好的方法使用 C# 代码从 GCS 存储桶下载文件?

最佳答案

如@eespinola 所述,您可以在 ListObjects 请求中指定前缀。如果您的正则表达式恰好以非正则表达式特殊字符开头(即除了“[”、“]”、“*”等),您可以为该部分构建一个前缀查询,然后使用正则表达式,就像你现在做的那样。 gsutil 的工作方式如下,例如,如果您这样做:

gsutil ls gs://my-bucket/abc[0-9]*

它将使用“abc”作为前缀,然后在客户端执行剩余的过滤。

关于c# - 存储客户端列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58991007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com