文件流正被另一个进程使用

时间:2012-03-22 14:55:03

标签: c# .net file stream

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',因为它正由另一个进程

使用

我已经全部关闭并且全部处理掉了。有什么问题?

4 个答案:

答案 0 :(得分:9)

替换:

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

使用:

StreamReader sr=new StreamReader(f1);

您正在创建没有StreamReader

的新FileStream

其他数据:

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

  • Dispose方法调用Close方法。请阅读this了解详情。

含义:您可以移除您在Dispose上写的CloseFileStream

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

但是真的应该使用{{1>} 非托管资源,请阅读this

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

更改

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

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

答案 3 :(得分:1)

问题可能在:

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

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