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 \ 연구 \ NABC \ 연구 \ n"
된다분명히, 123은 SetLength (0)을 호출하기 전에 작성된 경우에도 삭제되지 않았습니다.
Seek()를 사용하거나 Position을 0으로 설정하면 도움이되지 않았습니다.
내 응용 프로그램에서는 계속 열려있는 파일에 쓰고 있습니다. 때로는 파일을 완전히 비우고 다른 내용을 작성해야 할 수도 있습니다. 성능상의 이유로 streamWriter를 닫고 싶지 않습니다.
내가 질문이 중복으로 잘못 표시되어있어 것을 유래에 매우 실망 경험을했다 복제로 잘못 질문을 표시 사랑하는 모든 사람들에게
참고. 나는 질문을 쓰는 데 하루를 보냈다. 그는 그것이 순식간에 복제본이 아니라고 결정한다. 이것은 보통 그 사람이 질문을 진정으로 이해하지 못하고 정답을 찾지 않아도 발생합니다. 그는 전에 비슷한 문제가 해결되었다고 생각합니다. 그러나 세부 사항은 중요합니다. 예, SetLength (0)을 사용하여 파일을 잘라내는 것에 대한 질문이 있지만 한 가지 중요한 점에서 다릅니다. 이러한 예에서 SetLength (0) 앞에는 Write()가 없습니다. 그러나 이것은 필수적이며, 문제가 없다면 필수적입니다.
질문을 중복으로 표시하여 다른 사람들이 응답하지 못하게 할 때 매우 신중하고 신중하십시오.
StreamWriter는 사용자가 기본 스트림을 어지럽히는지 여부를 알지 못합니다. 그것은 버퍼 자체를 가지고 있으며, 플러시()해야합니다. –
정말로 깨끗하게하는 유일한 방법은 새 스트림으로 닫고 다시 여는 것입니다. – jdweng
@jdweng : Flush()를 사용하는 내 솔루션이 작동하는 것 같습니다. 문제가 발생한다는 사실을 알지 못할 수도 있습니다. 그게 무엇인지 설명해 주시겠습니까? –