FileStream.SetLength(0)に奇妙な問題が見つかりました。ストリームへの最初の何かを書き、その後はsetLengthを呼び出すとき(0)、まだファイルに書き込まれます前の書き込みの内容は:StreamWriter.WriteLine()の後、FileStream.SetLength(0)はファイルを空にしません。
var fileName = "test.txt";
using (var fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read, 8000, FileOptions.None))
{
using (var streamWriter = new StreamWriter(fileStream, Encoding.Default, bufferSize: 8000, leaveOpen: true))
{
streamWriter.WriteLine("123");
fileStream.SetLength(0);
streamWriter.WriteLine("abc");
}
}
var fileContent = File.ReadAllText(fileName);
含むFileContentは "123 \ rを\ NABC \ rを\ n" は
なり明らかに、SetLength(0)を呼び出す前に書き込まれたとしても、123は削除されませんでした。
Seek()を使用するか、Positionを0に設定しても役に立たなかった。
私のアプリケーションでは、私は開いたままのファイルに書き込みます。時には、ファイルを完全に空にして別のコンテンツを書き込む必要が生じることがあります。パフォーマンス上の理由から、私はstreamWriterを閉じたくありません。誤って私は質問が重複として誤ってマークされてしまったことをStackOverflowの上に非常にイライラする経験をした重複
ような質問をマークするために愛するすべてのそれらの人に
注意。私は質問を書く日を過ごした。彼はそれが重複していると瞬時に判断する。これは、通常、その男が本当に質問を理解しておらず、正しい答えを見つけるのを煩わせることがない場合に発生します。彼はそれ以前に同様の問題が解決されたと感じています。しかし、詳細は重要です。はい、SetLength(0)を使用してファイルを切り詰めることについて質問がありますが、1つの重要な点で異なります。これらの例では、 はSetLength(0)の前にWrite()がありません。しかし、これは不可欠であり、問題がなければ問題ありません。
質問を重複して記入して他人の回答を妨害する場合は、十分に注意してください。
StreamWriterは、基になるストリームを使いこなしていることを知りません。それはバッファそのものを持っているので、Flush()する必要があります。 –
本当にクリアする方法は、新しいストリームとして閉じて再び開くことです。 – jdweng
@jdweng:Flush()を使っている私の解決策はうまくいくように思えますが、問題が生じることはわかりません。それが何であるか説明できますか? –