Я пишу приложение, где есть два вызова внешних программ, RichCopy и 7zip. Идея заключается в использовании RichCopy для перемещения файлов и 7zip для архивирования и шифрования файлов после завершения RichCopy. Проблема, с которой я сталкиваюсь, заключается в том, что приложение не ждет, когда RichCopy завершит перемещение файлов, прежде чем 7zip попытается их заархивировать, несмотря на то, что я использую WaitForExit. Код ниже:Действительно ли WaitForExit ожидает завершения внешней программы?
file_copy(groupNumberINT, groupNumber, extFolderPath, scanFolderPath);
encrypt_data(groupNumber, outputFolder);
private void file_copy(int groupNumberINT, string groupNumber, string externalFolder, string scansFolder)
{
if (groupNumberINT < 370)
{
string sourceFolder = "D:\\Test\\Production\\CMSFILE001-Copy\\" + groupNumber;
ProcessStartInfo f001 = new ProcessStartInfo();
f001.FileName = "C:\\Program Files (x86)\\Microsoft Rich Tools\\RichCopy 4.0\\RichCopy.exe"; //Edit in prod
f001.Arguments = sourceFolder + " " + externalFolder;
f001.WindowStyle = ProcessWindowStyle.Normal;
Process f1 = Process.Start(f001);
f1.WaitForExit();
}
}
private void encrypt_data(string groupNumber, string outputDirectory)
{
// Create 7zip encrypted archive
string archiveName = groupNumber + @".7z";
string archiveFolder = @"D:\Test\" + groupNumber;
string outputFile = tbGroupNumber.Text + ".7z";
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "C:\\Program Files\\7-Zip\\7za.exe";
p.Arguments = "a -mx -mhe -pPassword fileout.7z folder";
p.WindowStyle = ProcessWindowStyle.Maximized;
Process x = Process.Start(p);
x.WaitForExit();
}
Так RichCopy стартует, но сразу же после того, как я вижу заставка для RichCopy 7zip начинает архивирование и шифрование пустой папки. Есть ли что-то, что мне не хватает, или метод WaitForExit() должен дождаться завершения процесса, прежде чем перейти к следующей строке кода?
Согласно документам, он должен подождать. Правильно ли работает 'file_copy', если вы не вызываете' encrypt_data'? У ваших имен папок есть пробелы? – Henrik
Попробуйте f001.FileName = "\" C: \\ Program Files (x86) \\ Microsoft Rich Tools \\ RichCopy 4.0 \\ RichCopy.exe \ ""; // Редактировать в prod – artm
@Henrik - file_copy работает правильно. Все файлы, которые я хочу переместить, перемещаются. –