2010-02-25 1 views
1

endl을 입력 할 때 줄을 바꿀 때 제 파일을 쓸 때 출력에 문제가 있습니다.iostream 문제가 있습니다. 내 출력 endl은 사각형입니다.

std::ofstream outfile (a_szFilename, std::ofstream::binary); 
outfile<<"["<<TEST<<"]"<<std::endl; 

내 파일에 다음과 같은 내용이 표시됩니다. 다른 출력은 다음 줄이 아니라 같은 줄에 쓰입니다.

[TEST]square 

분명히 여기에 사각형을 쓸 수는 없지만 ofstream은 바이너리 또는 무언가입니까?

+0

나는 Windows에서 실행 중입니까? 메모장에서 파일을보고 있습니까? 워드 패드에서보십시오. –

+0

그래,하지만 메모장에서보아야 만한다. 다른 모든 줄에는 메모장에 줄 바꿈이있다. – DogDog

답변

5

이 경우 이진 모드로 파일을 열지 않으려합니다.

대신을 시도해보십시오

std::ofstream outfile (a_szFilename); 
outfile<<"["<<TEST<<"]"<<std::endl; 
+2

나는 이것이 다운 투표를해야한다고 생각하지 않는다. 맞다. 형식화 된 출력과 바이너리는 함께 사용되지 않습니다. – GManNickG

3

당신은 바이너리 모드로 파일을 여는 것입니다. 이 경우 ENDL는 \로 작성 N 창에 줄 바꿈이 있어야하는 동안 \ 연구 \ n

방금 ​​번역이 자동으로

을 할 것 binary 플래그를 포함하지 않는 텍스트 모드에서 파일을 열려면
std::ofstream outfile(a_szFilename); 
outfile<<"["<<TEST<<"]"<<std::endl; 
+0

그런 다음 어떤 모드를 사용해야합니까? – DogDog

2

아마도 바이너리 모드이고 줄 끝이 잘못 되었기 때문일 수 있습니다. std::endl은 플러시하기 전에 '\n'을 스트림에 배치합니다. 텍스트 모드에서는 플랫폼에 맞는 올바른 행으로 변환됩니다. 바이너리 모드에서는 그러한 변환이 일어나지 않습니다.

Windows를 사용하는 경우 코드에 줄 바꿈 (LF)이 있지만 Windows에는 캐리지 리턴 (CF)이 먼저 필요하며 이는 '\r'입니다. 즉, 개행뿐만 아니라 "\ r \ n"을 원합니다.

수정 사항은 텍스트 모드에서 파일을 여는 것입니다. 바이너리 파일은 개행과 삽입 된 연산자를 사용하지 않으려는 이유로 개행이나 포맷 된 출력을 출력하지 않습니다.

바이너리를 실제로 사용하려면 파일을 바이너리 파일처럼 취급하고 올바르게 표시 할 것을 기대하지 마십시오. 바이너리 및 형식화 된 출력물은 서로 연결되지 않습니다. 당신의 사용법에서, 그것은 당신이 텍스트 모드에서 열어야하는 것 같습니다.