获取Azure文件共享(CloudFileDirectory)中的所有文件 [英] Getting all files in Azure file share (CloudFileDirectory)
问题描述
我正在寻找一种C#方法,该方法将返回Azure文件共享中的所有文件(在所有子目录中).
I'm looking for a C# method that will return all files (in all sub-directories) in an Azure file share.
有一个示例,但会引发运行时错误.我已经尝试了下面的代码示例,但是从这里得到了异常.
Have an example but it throws a run time error. I've tried the code example below which I got from here however it throws an exception.
我已经将代码粘贴到了这里,但是如果有人使用可以遍历Azure目录的方法,get文件将会很棒.
I have pasted the code in here but if anyone has a method that walks the entrire Azure directory get gets files that would be great.
CloudFileDirectory dir = fclient.GetShareReference(share.ToString()).GetRootDirectoryReference();
foreach (IListFileItem file in dir.ListFilesAndDirectories()) //.Directory.ListFilesAndDirectories())
{
list_subdir(file);
}
和方法.
public static void list_subdir(IListFileItem list)
{
Console.WriteLine("subdir");
CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
foreach (IListFileItem listItem in fileList)
{
if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
{
list_subdir(listItem);
}
else
{
Console.WriteLine(listItem.Uri.Segments.Last());
}
}
}
",位于Microsoft.WindowsAzure.Storage.Core.Executor.Executor.d__1 1.MoveNext()
in C:\Program Files (x86)\Jenkins\workspace\dotnet-split-pr-master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 82
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.<>c__DisplayClass0_0
1.b__0()中
C:\ Program Files(x86)\ Jenkins \ workspace \ dotnet-split-pr-master \ Lib \ ClassLibraryCommon \ Core \ Executor \ Executor.cs:第41行
" at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.d__11.MoveNext()
in C:\Program Files (x86)\Jenkins\workspace\dotnet-split-pr-master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 82
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.<>c__DisplayClass0_0
1.b__0() in
C:\Program Files (x86)\Jenkins\workspace\dotnet-split-pr-master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 41
推荐答案
我有nuget包 WindowsAzure.Storage ,版本9.3.3.下面的代码对我来说很好用,列出了子目录中的所有文件.
I have the nuget package WindowsAzure.Storage, version 9.3.3 installed. And the code below works fine for me, all files in sub-directories are listed.
static void Main(string[] args)
{
string accountName = "xxx";
string key = "xxxx";
var storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, key), true);
var share = storageAccount.CreateCloudFileClient().GetShareReference("testfolder");
IEnumerable<IListFileItem> fileList = share.GetRootDirectoryReference().ListFilesAndDirectories();
foreach (IListFileItem listItem in fileList)
{
if (listItem.GetType() == typeof(CloudFile))
{
Console.WriteLine(listItem.Uri.Segments.Last());
}
else if(listItem.GetType() == typeof(CloudFileDirectory))
{
list_subdir(listItem);
}
}
Console.WriteLine("done now");
Console.ReadLine();
}
public static void list_subdir(IListFileItem list)
{
//Console.WriteLine("subdir");
CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
foreach (IListFileItem listItem in fileList)
{
if (listItem.GetType() == typeof(CloudFileDirectory))
{
list_subdir(listItem);
}
else
{
Console.WriteLine(listItem.Uri.Segments.Last());
}
}
}
文件共享中的目录:
根:
子目录1:
子目录2:
测试结果:列出了子目录中的所有文件:
这篇关于获取Azure文件共享(CloudFileDirectory)中的所有文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!