Я пытаюсь скопировать контейнеры в Azure из одного места хранения в другое. Для этого я использую команду AzCopy. Сначала я получаю список всех контейнеров, а затем запускаю AzCopy на основе имени контейнера из командной строки, используя код C #.
Проблема, с которой я столкнулся, заключается в том, что он копирует контейнеры из одного места в другое, но после 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());
}
}
}