如何获取 azure 文件共享存储 c# 中子文件夹内的所有文件?
How to get all files which is inside sub-folders in azure file share storage c#?
我想复制子文件夹中的所有文件。
文件夹结构-
Source\Folder1\Data\file1.txt
Source\Folder1\Data\file2.txt
Source\Folder1\Data\Temp1\temp1.txt
Source\Folder1\Data\Temp1\temp2.txt
我有以下代码,但我只得到 root and its sub-folders not inside it
。
我想要递归代码。感谢@Compufreak 的递归代码
我仍然无法复制文件,因为源不是当前的源文件夹。
public static void list_file()
{
//***** Get list of all files/directories on the file share*****//
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
CloudFileShare fileShare = fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);
IEnumerable<IListFileItem> fileList = fileShare.GetRootDirectoryReference().ListFilesAndDirectories(ConfigurationManager.AppSettings["sourceName"]);
CloudFileDirectory rootDir = fileShare.GetRootDirectoryReference();
CloudFileDirectory sourceDir = rootDir.GetDirectoryReference(ConfigurationManager.AppSettings["sourceName"]);
CloudFileDirectory destinationDir = rootDir.GetDirectoryReference(ConfigurationManager.AppSettings["destinationName"]);
// Print all files/directories listed above.
foreach (IListFileItem listItem in fileList)
{
// listItem type will be CloudFile or CloudFileDirectory.
Console.WriteLine(listItem.Uri.Segments.Last());
Console.WriteLine(listItem.GetType());
if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
{
list_subdir(listItem, sourceDir, destinationDir);
}
}
}
public static void list_subdir(IListFileItem list, CloudFileDirectory sourceDir, CloudFileDirectory destinationDir)
{
Console.WriteLine("subdir");
CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
// Print all files/directories in the folder.
foreach (IListFileItem listItem in fileList)
{
// listItem type will be CloudFile or CloudFileDirectory.
if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
{
list_subdir(listItem,sourceDir,destinationDir);
}
else
{
Console.WriteLine(listItem.Uri.Segments.Last());
// move file to destination
// Get a reference to the file we created previously.
CloudFile sourceFile = sourceDir.GetFileReference(listItem.Uri.Segments.Last());
// Ensure that the source file exists.
if (sourceFile.Exists())
{
// Get a reference to the destination file.
CloudFile destFile = destinationDir.GetFileReference(listItem.Uri.Segments.Last());
// Start the copy operation.
destFile.StartCopy(sourceFile);
// Write the contents of the destination file to the console window.
Console.WriteLine(destFile.DownloadText());
}
}
}
}
我建议在这里使用递归(如果是目录,我在 list_subdir 中添加了对 list_subdir 的调用):
public static void list_subdir(IListFileItem list)
{
Console.WriteLine("subdir");
CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
// Print all files/directories in the folder.
foreach (IListFileItem listItem in fileList)
{
// listItem type will be CloudFile or CloudFileDirectory.
if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
{
list_subdir(listItem);
} else {
Console.WriteLine(listItem.Uri.Segments.Last());
}
}
}
我想复制子文件夹中的所有文件。
文件夹结构-
Source\Folder1\Data\file1.txt
Source\Folder1\Data\file2.txt
Source\Folder1\Data\Temp1\temp1.txt
Source\Folder1\Data\Temp1\temp2.txt
我有以下代码,但我只得到 root and its sub-folders not inside it
。
我想要递归代码。感谢@Compufreak 的递归代码 我仍然无法复制文件,因为源不是当前的源文件夹。
public static void list_file()
{
//***** Get list of all files/directories on the file share*****//
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
CloudFileShare fileShare = fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);
IEnumerable<IListFileItem> fileList = fileShare.GetRootDirectoryReference().ListFilesAndDirectories(ConfigurationManager.AppSettings["sourceName"]);
CloudFileDirectory rootDir = fileShare.GetRootDirectoryReference();
CloudFileDirectory sourceDir = rootDir.GetDirectoryReference(ConfigurationManager.AppSettings["sourceName"]);
CloudFileDirectory destinationDir = rootDir.GetDirectoryReference(ConfigurationManager.AppSettings["destinationName"]);
// Print all files/directories listed above.
foreach (IListFileItem listItem in fileList)
{
// listItem type will be CloudFile or CloudFileDirectory.
Console.WriteLine(listItem.Uri.Segments.Last());
Console.WriteLine(listItem.GetType());
if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
{
list_subdir(listItem, sourceDir, destinationDir);
}
}
}
public static void list_subdir(IListFileItem list, CloudFileDirectory sourceDir, CloudFileDirectory destinationDir)
{
Console.WriteLine("subdir");
CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
// Print all files/directories in the folder.
foreach (IListFileItem listItem in fileList)
{
// listItem type will be CloudFile or CloudFileDirectory.
if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
{
list_subdir(listItem,sourceDir,destinationDir);
}
else
{
Console.WriteLine(listItem.Uri.Segments.Last());
// move file to destination
// Get a reference to the file we created previously.
CloudFile sourceFile = sourceDir.GetFileReference(listItem.Uri.Segments.Last());
// Ensure that the source file exists.
if (sourceFile.Exists())
{
// Get a reference to the destination file.
CloudFile destFile = destinationDir.GetFileReference(listItem.Uri.Segments.Last());
// Start the copy operation.
destFile.StartCopy(sourceFile);
// Write the contents of the destination file to the console window.
Console.WriteLine(destFile.DownloadText());
}
}
}
}
我建议在这里使用递归(如果是目录,我在 list_subdir 中添加了对 list_subdir 的调用):
public static void list_subdir(IListFileItem list)
{
Console.WriteLine("subdir");
CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
// Print all files/directories in the folder.
foreach (IListFileItem listItem in fileList)
{
// listItem type will be CloudFile or CloudFileDirectory.
if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
{
list_subdir(listItem);
} else {
Console.WriteLine(listItem.Uri.Segments.Last());
}
}
}