我尝试使用以下代码在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 ..
答案 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();