我正在编写一个应用程序,其中有两个对外部程序的调用,即RichCopy和7zip。这个想法是,一旦RichCopy完成,就可以使用RichCopy来移动文件,并使用7zip来存档和加密文件。我遇到的问题是,尽管我使用的是WaitForExit,但应用程序并没有等待RichCopy在7zip尝试对其进行归档之前完成文件的移动。代码如下:
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()方法应该等到过程完成之后再继续进行下一行代码?
最佳答案
等待退出不会等待外部进程完成。
我的猜测是,您启动的第一个Richcopy可执行文件可能会启动另一个进程,然后执行真正的复制工作。
一个等待退出的工作示例:
using System.Diagnostics;
public class MainApp
{
public static void Main(string[] args)
{
string textFile = @"c:\workspace\1.txt";
openNotepad(textFile);
openNotepad(textFile);
}
private static void openNotepad(string textfile)
{
ProcessStartInfo f001 = new ProcessStartInfo();
f001.FileName = "notepad.exe";
f001.Arguments = textfile;
f001.WindowStyle = ProcessWindowStyle.Normal;
Process f1 = Process.Start(f001);
f1.WaitForExit();
}
}