我能够使用 ShareDirectoryClient 成功移动 azure 中的目录。
using System;
using System.Threading.Tasks;
using Azure.Storage.Files.Shares;
namespace SO69798149
{
class Program
{
const string MyconnectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key";
const string MyshareName = "share-name";
const string SourceDirectoryName = "source-directory-name";
private const string RenamedDirectoryName = "new-directory-name";
static async Task Main(string[] args)
{
ShareClient myshare = new ShareClient(MyconnectionString, MyshareName);
ShareDirectoryClient sourceDirectoryClient = myshare.GetDirectoryClient(SourceDirectoryName);
ShareDirectoryClient targetDirectoryClient = myshare.GetDirectoryClient(RenamedDirectoryName);
await RenameDirectory(sourceDirectoryClient, targetDirectoryClient);
Console.WriteLine("Directory renamed.");
}
static async Task RenameDirectory(ShareDirectoryClient sourceDirectoryClient,
ShareDirectoryClient targetDirectoryClient)
{
//Create target directory
await targetDirectoryClient.CreateIfNotExistsAsync();
//List files and folders from the source directory
var result = sourceDirectoryClient.GetFilesAndDirectoriesAsync();
await foreach (var items in result.AsPages())
{
foreach (var item in items.Values)
{
if (item.IsDirectory)
{
//If item is directory, then get the child items in that directory recursively.
await RenameDirectory(sourceDirectoryClient.GetSubdirectoryClient(item.Name),
targetDirectoryClient.GetSubdirectoryClient(item.Name));
}
else
{
//If item is file, then copy the file and then delete it.
var sourceFileClient = sourceDirectoryClient.GetFileClient(item.Name);
var targetFileClient = targetDirectoryClient.GetFileClient(item.Name);
await targetFileClient.StartCopyAsync(sourceFileClient.Uri);
await sourceFileClient.DeleteIfExistsAsync();
}
}
}
//Delete source directory.
await sourceDirectoryClient.DeleteIfExistsAsync();
}
}
}
我正在使用 ShareDirectoryClient 在 azure 中移动目录。这里我们如何在移动文件夹后对其进行压缩。
我的方法:
using System.IO.Compression;
ZipFile.CreateFromDirectory(sourceDirectoryClient.Path, targetDirectoryClient.Path);
错误:找不到路径“/app/NewFolder/test.zip”的一部分。
请协助我解决问题
注意:我们还可以使用下面的库 https://github.com/icsharpcode/SharpZipLib
Zipping a directory using C# and SharpZipLib
void fastcompressDirectory(string DirectoryPath, string OutputFilePath, int CompressionLevel = 9)
{
ICSharpCode.SharpZipLib.Zip.FastZip z = new ICSharpCode.SharpZipLib.Zip.FastZip();
z.CreateEmptyDirectories = true;
z.CreateZip(OutputFilePath, DirectoryPath, true, "");
if (File.Exists(OutputFilePath))
Console.WriteLine("D0ne");
else
Console.WriteLine("Failed");
}
上面的代码会将所有文件夹内容压缩到一个新的 zip 文件中。我们如何在 azure sharedirectoryclient 目录中实现相同的效果。
最佳答案
我的理解是,您想要压缩 Azure 文件共享中的目录并将结果 zip 存档存储在同一个 Azure 文件共享上。
您遇到的 ZipFile.CreateFromDirectory
问题与路径和执行代码的位置有关。如果您替换这些路径,您将得到类似的内容:
ZipFile.CreateFromDirectory("/app/NewFolder", "/app/NewFolder.zip");
这些路径被视为您的应用程序的本地路径(如果您的应用程序位于 C:\MyApp
中,那么它们将解析为 C:\MyApp\app\NewFolder
) 。 ZipFile
不使用 Azure 文件共享,这是主要问题。
您可以尝试使用 Azure 数据工厂来压缩文件夹,或者 Josefs Ottosson tutorial如果您想在代码中实现这一点,将会很有帮助。
或者,如果您将共享附加到运行应用程序的计算机,那么您可以使用此方法,然后您可以操作该计算机上的文件。
关于c# - 如何在azure中移动目录并在azure文件共享中使用ShareDirectoryClient对其进行ZIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74393708/