2010-11-24 34 views
0

.NET DataSetsとXMLを使用してデータベースからデータをエクスポートおよびインポートするための小さなアプリケーションを作成しており、その一部として次のことを行っています。StreamWriter、FileStream、windowsファイルのロック

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

問題は近い方法がFileStreamを(コンストラクタに渡されたファイルのパラメータ)を閉じますが、ファイルのロックを解除しないことです。このファイルは私が作成したプログラムが作成するファイルなので、他のものはロックしていません。

私は何か間違っているのですか、これはWindowsのバグですか?

EDIT

はい「ファイルは」FileStreamオブジェクトであり、私は単純にファイルストリームをラップストリーム上)(近くに呼び出すこともクリーンアップとFileStreamを呼び出すことにより、基本となるファイルストリームを配置すると仮定しました。 closeメソッド。しかし、私はそれについてもう分かりません。

これを使用ブロックで折り返しても同じ効果があります。

一つ余分ノートは、FileStreamオブジェクトが別の方法で作成されますが、それは何の違い

+3

ファイルがまだロックされているとはどのように判断しますか?私はこの種のことを非常に頻繁にやっています。あなたが描いている問題に遭遇したことはありません。 –

+0

「ファイル」とは何ですか?それはFileStreamですか?そうであれば、それを閉じる必要があり、それはOSの欠陥ではありません。 Jimのように、私は単純なIO操作で問題はありません。 –

+1

"肛門保持"と "奇妙な"ファイルロックを制御できます。ファイルを開くときにファイルをロックしたくない場合は、次のようにします。http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx http://msdn.microsoft.com/en-us/ /library/system.io.fileshare.aspx –

答えて

-1

この代わりに使用してみてくださいを作るべきではないということです。

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

(または手動でsw.Dispose()を呼び出そう)

+0

ドキュメント(http://msdn.microsoft.com/en-us/library/system.io.streamwriter.close.aspx)によると、 'Close'は' Dispose'を呼び出します。 –

+0

Dosen'tは、私が.NETでそれを再び開こうとすると、ファイルがまだロックされているように見える。 – eaglestorm

+0

はい、CloseはDisposeを呼び出します。問題は、OPが閉鎖していない「ファイル」であり、OSは「肛門保持と馬鹿」であると非難している。 –

-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オブジェクトの使い方を詳しく説明することができます。

+1

なぜ 'sw.Close()'を使っているのですか?廃棄はいずれかの方法で終了する必要があります。 –

+0

彼はおそらくちょうどopからコピー/ペーストする –

関連する問題