2012-03-22 34 views
4
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(); 

我收到此錯誤:文件的流正在被另一個進程使用

The process cannot access the file 'c:\file.xml' because it is being used by another process

我已經關閉了所有和配置所有。有什麼問題?

回答

9

替換:

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

有了:

StreamReader sr=new StreamReader(f1); 

您正在創建新的StreamReader沒有FileStream


其他數據:

  • 當調用StreamReader.Dispose時,StreamReader對象在提供的Stream對象上調用Dispose

  • Dispose方法調用Close方法。閱讀this瞭解更多信息。

含義:您可以刪除DisposeClose您在FileStream

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

+0

我有這個問題,請注意,您應該「關閉」流「之前」處置 – Mironline 2012-03-28 10:42:31

+0

@Mironline。這是自動完成的。閱讀**我的答案全部**你可以看到什麼是Dispose在做[這裏](http://stackoverflow.com/a/911431/601179) – gdoron 2012-03-28 10:46:12

2

你有一個FileStream,並在同一個文件一個StreamReader。 刪除此行:

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

變化

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

StreamReader sr=new StreamReader(f1); 
代碼followiong線的兩個

都試圖訪問同一文件單獨的對象:

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

所以每個試圖indivodually訪問德文件,而改變你的代碼,以我的連接情況下,SR訪問該文件通過F1

1

該問題可能是在:

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

文件流可訪問該文件,然後StreamReader嘗試單獨訪問文件。嘗試讓您的StreamReader使用相同的定義流。

相關問題