2011/10/17

CStdioFile::WriteString 의 함정

텍스트 파일 저장에 편하여 사용하는 CStdioFile 클래스의 WriteString에서 꼭 알아야할 사항이 있다.

뭐 나만 모르고 있는 것 일 수도 있지만...  CStdioFile::WriteString 은 널 문자를 쓰지 않고 Line feed(\n) 문자를 Carriage Return(\r) 과 Line Feed(\n) 짝을 이뤄 파일에 저장을 한다.



따라서 다섯개의 "\r\n"을 출력하면 아래 처럼 Carriage Return이 하나 더 붙어서 출력이 된다. 아래 내용을 읽어들인 프로그램은 Notepad2로 이 파일을 Mac 형식으로 인식해서 보여준다.



이렇게 작성한 파일은 나중에 메모장에서 Word Wrap 기능사용시 문제를 일으키기도 하는 것 같다.

CStdioFile::WriteString를 사용할 때는 여느 파일 작성때와 같이 버릇처럼 줄넘김을 윈도우 기본 형태인 \r\n 형태로 출력하면 안되겠다.



아마 처음 CStdioFile::WriteString 함수를 접할 때 MSDN을 한번만 이라도 주위깊게 읽었더라면 쉽게 알고 있을만한 사항이다.



MSDN 에서 CStdioFile::WriteString 함수에 대한 Remark 부분에 아래와 같은 설명이 되어 있다.

The terminating null character ('\0') is not written to the file. Any newline character in lpsz is written to the file as a carriage return–linefeed pair.

 



CStdioFile::WriteString on MSDN



+ 2011/10/19

이 문제는 CStdioFile::WriteString 함수만의 문제가 아니였다. 기본적으로 C 에서의 파일(FILE) 입출력 할 때 텍스트 모드로 할 경우 자동으로 변경 되는 것이다. MSDN에서 찾아보면 텍스트 모드에 대해서 아래와 같은 설명이 있었다.

in text mode, carriage return?linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return?linefeed combinations on output.


fopen on MSDN


&

Original Post : http://neodreamer-dev.tistory.com/601

No comments :

Post a Comment