【问题标题】:File-Stream is being used by another processFile-Stream 正被另一个进程使用
【发布时间】:2012-04-07 03:52:20
【问题描述】:
FileStream f=new FileStream("c:\\file.xml",FileMode.Create);
StreamWriter sf=new StreamWriter(f);
sf.WriteLine(stroka);
sf.Close();
sf.Dispose();
f.Close();
f.Dispose();
FileStream f1=new FileStream("c:\\file.xml",FileMode.Open);
StreamReader sr=new StreamReader("c:\\file.xml");
xmlreader=new XmlTextReader(sr);
sr.Close();
sr.Dispose();
f1.Close();
f1.Dispose();

我收到此错误:

进程无法访问文件'c:\file.xml',因为它正被另一个进程使用

我已全部关闭并处置所有。有什么问题?

【问题讨论】:

    标签: c# .net file stream


    【解决方案1】:

    替换:

    StreamReader sr=new StreamReader("c:\\file.xml");
    

    与:

    StreamReader sr=new StreamReader(f1);
    

    您正在创建没有FileStream 的新StreamReader


    其他数据:

    • StreamReader 对象在调用 StreamReader.Dispose 时在提供的 Stream 对象上调用 Dispose

    • Dispose 方法调用Close 方法。阅读this了解更多信息。

    含义:可以去掉FileStream上写的DisposeClose

    FileStream f = new FileStream("c:\\file.xml", FileMode.Create);
    StreamWriter sf = new StreamWriter(f);
    sf.WriteLine(stroka);
    sf.Dispose();
    
    FileStream f1 = new FileStream("c:\\file.xml", FileMode.Open);
    StreamReader sr = new StreamReader(f1);
    xmlreader = new XmlTextReader(sr);
    sr.Dispose();
    

    但是您真的应该将using statement 用于非托管资源,请阅读this

    【讨论】:

    • 我遇到了这个问题,请注意您应该在“处理”之前“关闭”流
    • @Mironline。这是自动完成的。阅读我的回答的全部...您可以看到 Dispose 在做什么here
    【解决方案2】:

    问题可能出在:

    FileStream f1=new FileStream("c:\\file.xml",FileMode.Open);
    StreamReader sr=new StreamReader("c:\\file.xml");
    

    Filestream 可能正在访问该文件,然后 StreamReader 尝试单独访问该文件。尝试让您的 StreamReader 使用相同的定义 Stream。

    【讨论】:

      【解决方案3】:

      改变

      StreamReader sr=new StreamReader("c:\\file.xml"); 
      

      StreamReader sr=new StreamReader(f1); 
      

      以下两行代码都是试图访问同一个文件的不同对象:

      FileStream f1=new FileStream("c:\\file.xml",FileMode.Open); 
      StreamReader sr=new StreamReader("c:\\file.xml"); 
      

      所以每个人都试图单独访问文件,而将您的代码更改为我的连接案例 sr 以通过 f1 访问文件

      【讨论】:

        【解决方案4】:

        您在同一个文件上有一个 FileStream 和一个 StreamReader。 删除这一行:

        FileStream f1=new FileStream("c:\\file.xml",FileMode.Open);     
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-13
          • 1970-01-01
          • 2016-12-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多