process.startInfo.Arguments:无法打开文件

时间:2015-07-26 03:00:28

标签: c#-4.0

我尝试使用以下代码在Windows上启动libsvm的svm_scale,

Process a = new Process();

a.StartInfo.FileName = ("C:\\Users\\Projects\\Documents\\libsvm-master\\windows\\svm-scale");

a.StartInfo.Arguments = ("-l -1 -u 1 -s range C:\\Users\\Projects\\Documents\\MyAttempts\\Attempt_3\\Final_Final.txt>C:\\Users\\Projects\\Documents\\MyAttempts\\Attempt_3\\Scale.scale");

a.Start();

但不幸的是,在运行此代码时,它说"无法打开文件C:\ Users \ Projects \ Documents \ MyAttempts \ Attempt_3 \ Final_Final.txt> C:\ Users \ Projects \ Documents \ MyAttempts \ Attempt_3 \ Scale .scale"

但是当我在命令提示符下键入相同的命令时,它可以正常工作并在指定的目标位置创建Scale.scale文件。 请帮我解决这个问题...... Thanx ..

2 个答案:

答案 0 :(得分:1)

问题在于,参数列表中的标准输出重定向部分(在'>'运算符之后)将被视为另一个参数。

这是因为输出重定向是windows shell为您执行的操作,并且您正在使用.net来启动svm-scale程序而不是shell。

如果您希望捕获您启动的进程的标准输出,则应将ProcessStartInfo.RedirectStandardOutput属性与流写入文件结合使用。过去已经回答了堆栈溢出问题 - 例如here

答案 1 :(得分:0)

finnaly I found a way to solve my error.


var startInfo = new ProcessStartInfo
                {
                    FileName = "cmd.exe",
                    RedirectStandardInput = true,
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    CreateNoWindow = true
                };

                var process = new Process { StartInfo = startInfo };

                process.Start();
                process.StandardInput.WriteLine(@"C:\\Users\\Batu\\Documents\\libsvm-master\\windows\\svm-scale -l -1 -u 1 -s range C:\\Users\\Batu\\Documents\\MyAttempts\\Attempt_3\\Final_Final.txt>C:\\Users\\Batu\\Documents\\MyAttempts\\Attempt_3\\Scale.scale");
                //process.StandardInput.WriteLine(@"dir>c:\results2.txt");
                process.StandardInput.WriteLine("exit");

                process.WaitForExit();