gpt4 book ai didi

c# - 使用 C# 命令行通过 AzCopy 复制容器

转载 作者:行者123 更新时间:2023-11-30 12:41:37 26 4
gpt4 key购买 nike

我正在尝试将 Azure 中的容器从一个存储位置复制到另一个存储位置。我为此使用 AzCopy 命令。首先,我获取所有容器的列表,然后使用 C# 代码根据命令行中的容器名称运行 AzCopy。

我遇到的问题是,它确实将容器从一个位置复制到另一个位置,但在 4 个容器之后,它似乎被卡住了。并且测试将永远运行。当我取消测试时,我看到所有其他容器也被复制。

我想知道如何解决完成测试并复制所有文件夹的问题。我尝试在每次通话后等待,以确保有足够的时间完成通话。还尝试使用 cmd.WaitForExit();每次调用后都会卡住。

关于我可能遗漏的内容的任何建议,我想做的一件事是在每次调用后获取输出,因为现在它仅在所有命令完成后才输出结果。还正在考虑如何按顺序运行命令行调用,因此仅在第一个调用完成后运行。

如有任何帮助,我们将不胜感激!

namespace Test2
{
[TestFixture]
class ContainerList
{
[Test]
public void CopyingContainerData()
{
CloudStorageAccount sourceCloudStorageAccount =
CloudStorageAccount.Parse("StorageAccountKey");
CloudBlobClient sourceCloudBlobClient = sourceCloudStorageAccount.CreateCloudBlobClient();
List<string> outputLines = new List<string>();
IEnumerable<CloudBlobContainer> containers = sourceCloudBlobClient.ListContainers();


Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = false;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
int i = 0;

foreach (CloudBlobContainer oneContainer in containers)
{

string outputLine = oneContainer.Name;
outputLines.Add(outputLine);
string container = oneContainer.Name;
string strCmdText = @"AzCopy /Source:https://location1.blob.core.windows.net/" + container + @" /Dest:https://location2.blob.core.windows.net/" + container + @" /SourceKey:abc /DestKey:abc123 /S /NC:8 /XO /Y";
string location = @"cd C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy";

cmd.StandardInput.WriteLine(location);
cmd.StandardInput.WriteLine(strCmdText);
//System.Threading.Thread.Sleep(20000);
//cmd.WaitForExit();

i++;

if (i == 15)
{
break;
}

}
string[] outputText = outputLines.ToArray();
File.WriteAllLines(@"C:\AzureTests\CopyData.txt", outputText);


cmd.StandardInput.Flush();
cmd.StandardInput.Close();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());



}
}
}

最佳答案

我建议您使用 powershell 来执行此操作:

$SourceStorageAccount = "sourceStorageAccount"
$SourceStorageKey = "sourceKey"
$DestStorageAccount = "destStorageAccount"
$DestStorageKey = "destKey"

$SourceStorageContext = New-AzureStorageContext –StorageAccountName $SourceStorageAccount -StorageAccountKey $SourceStorageKey
$DestStorageContext = New-AzureStorageContext –StorageAccountName $DestStorageAccount -StorageAccountKey $DestStorageKey

$containers = Get-AzureStorageContainer -Context $SourceStorageContext

foreach($container in $containers) {
New-AzureStorageContainer -Context $DestStorageContext -Name $container.name -Permission Off

$Blobs = Get-AzureStorageBlob -Context $SourceStorageContext -Container $container.name

#Do the copy of everything
foreach ($Blob in $Blobs) {
Write-Output "Moving $Blob.Name"
Start-CopyAzureStorageBlob -Context $SourceStorageContext -SrcContainer $container.name -SrcBlob $Blob.Name `
-DestContext $DestStorageContext -DestContainer $container.name -DestBlob $Blob.Name
}
}

关于c# - 使用 C# 命令行通过 AzCopy 复制容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com