問題は、その種のチェックが内部的に行われることであり、ファイルが非表示の場合 (たとえば、既に存在するファイルに対して aFile.Exists()
を実行しようとする場合) に失敗するようです。FileMode.Create
したがって、FileMode.OpenOrCreate
ファイルが非表示の場合でもファイルが開かれていること、または作成されていることを確認する場合、またはファイルがFileMode.Open
存在しない場合に作成したくない場合に使用します。
ただし、 を使用するFileMode.OpenOrCreate
と、ファイルは切り捨てられないため、テキストの末尾に余白が残らないように、末尾に長さを設定する必要があります。
using (FileStream fs = new FileStream(filename, FileMode.Open)) {
using (TextWriter tw = new StreamWriter(fs)) {
// Write your data here...
tw.WriteLine("foo");
// Flush the writer in order to get a correct stream position for truncating
tw.Flush();
// Set the stream length to the current position in order to truncate leftover text
fs.SetLength(fs.Position);
}
}
.NET 4.5 以降を使用している場合は、新しいオーバーロードがありStreamWriter
、基になるストリームも破棄するために破棄されます。コードは、次のように、より直感的に少し書くことができます。
using (FileStream fs = new FileStream(filename, FileMode.Open)) {
using (TextWriter tw = new StreamWriter(fs, Encoding.UTF8, 1024, true)) {
// Write your data here...
tw.WriteLine("foo");
}
// Set the stream length to the current position in order to truncate leftover text
fs.SetLength(fs.Position);
}