【问题标题】:Azure File Share Check if multiple files exitsAzure 文件共享检查是否存在多个文件
【发布时间】:2022-11-04 00:40:06
【问题描述】:

我们使用 Azure 文件共享(文件共享,不是 GPV2,这意味着我们不使用 blob 或队列,只是文件共享)来存储我们的文件。

我们需要检查文件路径列表是否存在。

ShareFileClient.ExistsAsync 是否有“批量”版本?

否则最好的解决方法是什么?

我们尝试在每个路径上调用Exists,每个调用都在它自己的任务中,但是返回时间太长(对于 250 条路径,大约需要 25 秒):

var tasks = paths.AsParallel().Select(p => Task.Run(() =>
{
  // share is a captured variable of type ShareClient
  var dir = share.GetDirectoryClient(GetDirName(p));
  var file = dir.GetFileClient(GetFileName(p));
  var result = file.Exists();
  return result.Value;
}));

【问题讨论】:

  • 2 个问题 - 1) 目录中有多少个文件? 2 - 您要检查的文件是否遵循一些命名模式,例如所有文件都以一组共同的字符开头?
  • @GauravMantri 1)文件共享中有8个目录,每个目录都有子目录......等等。叶目录每个包含大约 20 个文件。 2)不是真的。有一些文件以一组常见的字符开头,但没有可能的逻辑来定位它们。
  • 谢谢。从上面的代码中,您似乎想要检查特定目录中的文件是否存在,而不是该目录及其子目录中。那是对的吗?
  • @GauravMantri 是正确的。
  • 谢谢。发布了答案。 HTH。

标签: azure azure-cloud-services azure-file-share


【解决方案1】:

因此,没有直接的方法来检查多个文件的存在。

但是,有一个解决方法:

您可以做的是使用GetFilesAndDirectoriesAsync(ShareDirectoryGetFilesAndDirectoriesOptions, CancellationToken) 方法列出目录中的文件和子目录。获得列表后,您将遍历列表,并可以检查目录中是否存在具有特定名称的文件。

这将更快且更具成本效益,因为您正在发出单个请求来获取文件列表,而不是在每个方法调用都是单独的网络请求的每个文件上调用 FileClient.Exists 方法。

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 2019-07-19
    • 2012-08-11
    • 2022-06-30
    • 1970-01-01
    • 2016-03-19
    • 2019-01-15
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多