“进程无法访问该文件,因为它正由另一个进程使用”

时间:2014-12-22 01:47:09

标签: c# winforms visual-studio-2010 filestream iostream

我正在使用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;
    }

2 个答案:

答案 0 :(得分:2)

使用流阅读器完成后,您必须添加

file.Close();

关闭流,然后可以安全地从其他地方使用它

答案 1 :(得分:1)

当调用process.Start()时,程序不会在执行下一个语句之前等待hd.exe结束,只需触发并忘记。 hd.exe仍在工作并保持output.txt,而你的程序在调用后立即运行numberOfFrames()方法。

在process.Start()之后添加以下行以等待退出

process.WaitForExit()

MSDN - Process.WaitForExit()

顺便说一句,如果你需要以只读方式打开文件(不是读写),请使用File.OpenRead()

StreamReader streamReader = new StreamReader(File.OpenRead(file));