StreamWriter가 내용을 끝까지 Write하지 못해서 이유를 찾아보았더니 비교적 간단한 문제였다.
Stream을 매번 using()을 통해서 사용하다보니 놓치고 있던 부분이 있었다.
위의 문서를 살펴보면
This implementation of Close calls the Dispose method passing a true value.
You must call Close to ensure that all data is correctly written out to the underlying stream. Following a call to Close, any operations on the StreamWriter might raise exceptions. If there is insufficient space on the disk, calling Close will raise an exception.
Close는 Dispose를 호출하고, 반드시 Close를 호출해야 모든 데이터가 올바르게 스트림에 적힌다고 알려준다.
그렇다면 StreamWriter.Dispoe의 문서 또한 살펴보면
Causes any buffered data to be written to the underlying stream, releases the unmanaged resources used by the StreamWriter, and optionally the managed resources.
버퍼된 데이터가 stream에 적히도록하고, unmanaged resources를 해제한다고 적혀있다.
using() 문을 사용하면 구문 종료시에 Dispose를 자동으로 호출해서 모르고 있었다.
Stream을 사용할때는 using()문을 사용하거나, .Close() 메소드를 호출하자.