2010-11-24 54 views
0

我正在寫一個小應用程序來使用.NET DataSets和XML從數據庫導出和導入數據,並將其作爲我正在執行以下操作的一部分。StreamWriter,FileStream和Windows文件鎖

StreamWriter sw = new StreamWriter(file); 
sw.Write(xml.OuterXml); 
sw.Close(); 

問題是close方法關閉FileStream(傳遞給構造函數的文件參數),但不釋放文件鎖定。該文件是我編寫的程序創建的,因此我不知道其他任何內容都將其鎖定。

有什麼我做錯了或這是一個Windows錯誤?

編輯

是「文件」是一個FileStream對象,我天真地認爲調用close()在一個封裝中的文件流還清理和將調用的FileStream處置底層文件流的流。關閉方法。但我不能確定。

將此包裝在使用區塊中仍具有相同的效果。

一個額外注意的是,文件流對象在不同的​​方法創建的,但不應該有任何區別

+3

你如何確定文件仍然被鎖定?我經常這樣做,而且我從來沒有遇到過你描述的問題。 – 2010-11-24 00:25:29

+0

是啊,什麼是「文件」?它是一個FileStream嗎?如果是這樣,你需要關閉它,這不是操作系統的錯誤。像Jim一樣,我對簡單的IO操作沒有任何問題。 – 2010-11-24 01:19:23

+1

您可以控制「肛門保持性」和「moronic」文件鎖定。如果在打開文件時不想鎖定文件,請這麼說:http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx http://msdn.microsoft.com/en-us /library/system.io.fileshare.aspx – 2010-11-24 01:21:58

回答

-1

嘗試使用這個:

 
using (StreamWriter sw = new StreamWriter(file)) 
    sw.Write(xml.OuterXml); 

(或嘗試手動調用sw.Dispose()

-1

它是否有助於包裹文件流中的使用或只需使用重載的方法來創建流作家:

using (FileStream fs = new FileStream("path", FileMode.Append)) 
using (StreamWriter sw = new StreamWriter(fs)) 
{ 
    sw.Write(xml.OuterXml); 
    sw.Close(); 
} 

或:

using (StreamWriter sw = new StreamWriter("path")) 
{ 
    sw.Write(xml.OuterXml); 
    sw.Close(); 
} 

我懷疑問題是在代碼中創建或使用FILESTREAM。也許你可以詳細說明你如何使用你創建的FileStream對象。

相關問題