File 访问已处理文件时出错

File 访问已处理文件时出错,file,exception,file-io,streamwriter,File,Exception,File Io,Streamwriter,我面临一个问题。在我的程序中,我在桌面上创建了一个文件: var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); var fullFileName = Path.Combine(desktopFolder, "Report.txt"); var fs = new FileStream(fullFileName, FileMo

我面临一个问题。在我的程序中,我在桌面上创建了一个文件:

        var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        var fullFileName = Path.Combine(desktopFolder, "Report.txt");
        var fs = new FileStream(fullFileName, FileMode.Create);

        StreamWriter sw = new StreamWriter(fs);
[…正在写入文件…]

        sw.WriteLine("Report generated with***.");
        sw.Flush();
        sw.Close();
        sw.Dispose();
        fs.Close();
        fs.Dispose();
稍后,文件完成后,我再次阅读:

        FileInfo fi = new FileInfo(fullFileName);
        StreamReader objReader = new StreamReader(fi.OpenRead());
        string sLine = "";
        while (sLine != null)
        {
            sLine = objReader.ReadLine();
            if (sLine != null)
            {
                Report.Items.Add(sLine);
            }
        }

问题是,如果我尝试读取文件两次,我会得到一个错误:进程无法访问该文件,因为它正被另一个进程使用。有什么问题吗?

这很可能是因为在尝试使用
StreamReader
打开或访问文件之前,没有正确调用
StreamWriter
上的
Close()
方法造成的。从文章中的代码片段开始,在使用
StreamWriter
将所有需要的内容写入文件后,您需要进行以下调用

sw.Close();

使用此代码处理文件

using (StreamWriter s = new StreamWriter(/* your arguments here *\)) {
    // code that uses it here
}
// file is closed here

谢谢你指出这一点——实际上我已经结束了,我已经在我原来的帖子中添加了这些命令。我似乎从来不知道我需要发布代码的哪些部分:-不管怎样,在第二次读取时,它给了我这个错误,第一次顺利通过……当你说“读取文件两次”时,你是指循环的两次迭代,还是你实际上正在创建另一个
StreamReader
实例并再次传入文件流。我正在重新创建它。