我制作了一个程序,用于备份Azure上的存储帐户。要做到这一点,我使用AzCopy。我的存储帐户中有4个容器,我通过我的存储帐户执行foreach
以获取所有容器。我的第一个容器备份完好但是我告诉它上传后立即转到我的foreach中的下一个容器并尝试上传其内容。这会导致冲突[WARNING] Incomplete operation with different command line detected at the journal directory.
“journal”是由AzCopy创建的临时文件。
我认为这个问题正在发生,因为它试图在第一个容器完成之前上传我的第二个容器。无论如何要等到第一个容器中的所有内容都被上传后才尝试上传第二个容器?</ p>
我的命令提示符
的代码如下var AzCopyProcess = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Normal
};
var process = new Process { StartInfo = AzCopyProcess };
process.Start();
process.StandardInput.WriteLine($@"cd {strCommand}");
Console.WriteLine("Found directory");
process.StandardInput.WriteLine($@"AzCopy.exe");
Console.WriteLine("Found exe");
process.StandardInput.WriteLine($"AzCopy /Source:{pslFileStore.Uri} /Dest:{dayBlob.Uri} /SourceKey:{pslFileStoreKey.ToString()} /DestKey:{pslFileStoreBackUpKey.ToString()} /S");
process.BeginOutputReadLine();
Console.WriteLine($"Backed up ");
答案 0 :(得分:0)
您需要等到流程结束。调用此方法就足够了:
process.WaitForExit();
如果此解决方案不起作用,您可以尝试其他方式。在命令的开头添加“\ C'。在这种情况下不需要WaitForExit()。
var AzCopyProcess = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Normal
Arguments = $"/C {strCommand}/AzCopy.exe /Source:{pslFileStore.Uri} /Dest:{dayBlob.Uri} /SourceKey:{pslFileStoreKey.ToString()} /DestKey:{pslFileStoreBackUpKey.ToString()} /S"
};
var process = new Process { StartInfo = AzCopyProcess };
process.Start();
Console.WriteLine($"Backed up ");
/ C 告诉我们要执行命令然后退出。