我正在使用Windows Form在C#中编写应用程序。我想执行CMD命令,将结果保存到文本文件,然后在我的程序中打开此文件进行解析,最后使用我需要的值。不幸的是,当我运行它时,CMD写道“进程无法访问该文件,因为它正被另一个进程使用。我读了一些关于FileStream的内容,但如果我没有弄错,它只能在.NET应用程序中使用。我应该怎么做解决我的问题?
我使用以下代码部分。可能其中一个问题是:
private void exec_cmd(string arguments)
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = arguments;
process.StartInfo = startInfo;
process.Start();
}
public void countValues(string fileName){
exec_cmd("/C hd.exe "+fileName+" > out.txt");
}
private int numberOfFrames() {
System.IO.StreamReader file = new System.IO.StreamReader("out.txt");
string[] dane;
int ile = 0;
dane = new string[ile];
while (file.EndOfStream)
{
file.ReadLine();
ile++;
}
return ile - 1;
}
答案 0 :(得分:2)
使用流阅读器完成后,您必须添加
file.Close();
关闭流,然后可以安全地从其他地方使用它
答案 1 :(得分:1)
当调用process.Start()时,程序不会在执行下一个语句之前等待hd.exe结束,只需触发并忘记。 hd.exe仍在工作并保持output.txt,而你的程序在调用后立即运行numberOfFrames()方法。
在process.Start()之后添加以下行以等待退出
process.WaitForExit()
顺便说一句,如果你需要以只读方式打开文件(不是读写),请使用File.OpenRead()
StreamReader streamReader = new StreamReader(File.OpenRead(file));