【发布时间】:2022-01-15 03:19:06
【问题描述】:
我正在创建一种从 Azure 文件共享返回所有文件名的方法,但也包括扫描所有子文件夹。但是我的异步方法意外退出,没有任何理由。
方法接收到根文件夹(目录),这个根文件夹有几个子文件夹。
但是在这一行之后:
// return pageable list of directories and files.
AsyncPageable<ShareFileItem> PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync(directory);
该方法意外退出 foreach 行,因为 PageableDirectories 为空,但它有多个文件。
我的目录客户端变量不为空,并且指向“unistad-files”共享中的正确文件夹“unistad”:
见下面我的代码
/// <summary>
/// Returns all directories and files from the root folder.
/// </summary>
/// <param name="directory">Root folder</param>
/// <param name="returnDirectories">True return also directories, False return files only.</param>
/// <returns>List of directories and files.</returns>
public async Task<List<FileResponseItem>> GetDirectoriesAndFiles(string directory, bool returnDirectories)
{
// Get a reference to the directory
ShareDirectoryClient directoryClient = _shareClient.GetDirectoryClient(directory);
// Check the client exists
if (directoryClient != null)
{
// return pageable list of directories and files.
AsyncPageable<ShareFileItem> PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync(directory);
List<FileResponseItem> files = new List<FileResponseItem>();
//IAsyncEnumerator<ShareFileItem> enumerator = PageableDirectories.GetAsyncEnumerator();
await foreach(ShareFileItem file in PageableDirectories)
{
if (file.IsDirectory)
{
// If flagged to return the directories. Add the directory information to the list.
if (returnDirectories)
{
// Add the folder to the list to be returned.
files.Add(new FileResponseItem(file, ""));
}
// Recursively add the files within the sub folders.
string subFolder = Path.Combine(directory, file.Name);
List<FileResponseItem> subFolderFiles = await GetDirectoriesAndFiles(subFolder, false);
// Add the files found in the sub folder.
foreach(FileResponseItem subFolderFile in subFolderFiles)
files.Add(subFolderFile);
}
else
// Add the file to the list to be returned.
files.Add(new FileResponseItem(file,directory));
}
return files;
}
else
{
return null;
}
}
}
请参阅以下 Microsoft 网站中的说明:
async Task IterateSecretsWithAwaitForeachAsync()
{
AsyncPageable<SecretProperties> allSecrets = client.GetPropertiesOfSecretsAsync();
await foreach (SecretProperties secret in allSecrets)
{
Console.WriteLine($"IterateSecretsWithAwaitForeachAsync: {secret.Name}");
}
}
【问题讨论】:
-
directory设置为什么? -
应用程序的类型是什么?是控制台应用吗?
-
Ian,你是对的,该目录被引用了两次,感谢您在这方面帮助我。第一个是正确的,第二个是错误的,在方法中“GetFilesAndDirectoriesAsync”实际上是不需要的,因为是一个过滤器。
标签: c# .net-core async-await azure-storage