【问题标题】:Error when accessing a processed file访问已处理文件时出错
【发布时间】:2013-11-19 19:07:45
【问题描述】:

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

        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);
            }
        }

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

【问题讨论】:

    标签: file exception file-io streamwriter


    【解决方案1】:

    这很可能是由于在尝试使用StreamReader 打开或访问文件之前未正确调用StreamWriter 上的Close() 方法造成的。从您的帖子中的 sn-p 开始,您可能希望在使用 StreamWriter 将您想要的所有内容写入文件后进行以下调用。

    sw.Close();
    

    【讨论】:

    • 感谢您指出这一点 - 实际上我确实调用了关闭,我已在我的原始帖子中添加了这些命令。我似乎从来不知道我需要发布代码的哪些部分。 :-D 无论如何,第二次阅读时它给了我这个错误,第一次顺利通过...
    • 当您说“两次读取文件”时,您是指循环的两次迭代,还是您实际上是在创建另一个 StreamReader 实例并再次传入文件流。
    • 我正在重新创建它。
    【解决方案2】:

    使用此代码处理文件

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      相关资源
      最近更新 更多