我想将目录中的所有文件合并为一个。但是我尝试了几个版本但它们似乎都没有用。我收到一个错误,说找不到该文件。这就是我的尝试:
String outputFile = this.outputTxt.Text;
String inputFolder = this.inputTxt.Text;
String files = "";
String command;
foreach (String f in Directory.GetFiles(inputFolder))
{
files += f+"+";
}
files = files.Substring(0, files.Length - 1);
command = files + " " + outputFile;
Process.Start("copy",command);
我想要获得的样本: 复制a.txt + b.txt + c.txt + d.txt output.txt
我得到的错误是:
System.dll中出现未处理的“System.ComponentModel.Win32Exception”类型异常
附加信息:系统找不到指定的文件
答案 0 :(得分:5)
尝试使用进程启动cmd而不是“start”。
Process.Start("cmd", "copy " + command);
'copy'是命令提示符中的命令,别名为......某个东西,而不是Windows知道如何运行的实际文件本身(在命令提示符之外)。
如果在程序运行时不想在屏幕上显示shell,则可以使用Process类的属性来抑制shell弹出的窗口。
答案 1 :(得分:4)
您是否应该使用command
代替files
作为Process.Start
的第二个参数?
Process.Start("copy", command);
更新:
好的,所以这是一个错字。你的inputFolder文本怎么样?是否对目录使用双反斜杠(转义反斜杠)?与所有\
个字符一样,\\
。
答案 2 :(得分:2)
您需要使用copy命令和参数调用cmd.exe(如@Servy所述)。以下是您所需代码的清理版本:
String outputFile = this.outputTxt.Text;
String inputFolder = this.inputTxt.Text;
StringBuilder files = new StringBuilder();
foreach (String f in Directory.EnumerateFiles(inputFolder))
{
files.Append(f).Append("+");
}
files = files.Remove(file.Length-1, 1); // Remove trailing plus
files.Append(" ").Append(outputFile);
using (var proc = Process.Start("cmd.exe", "/C copy " + files.ToString()))
{
proc.WaitForExit();
}
你需要处理Process(因此使用using语句),因为你连接了很多字符串(可能还有很多字符串),你应该使用StringBuilder。