2017-03-17 12 views
1

poco libary FTPclientsession을 사용하여 ftp로 이진 파일을 다운로드하는 C++ 응용 프로그램을 만들었습니다. 내가 FTP에 서버가 1,048,576 바이트로 구성 1메가바이트의 파일을 (다운로드하려고하면istream에서 ostream으로 C++로 바이너리 파일 복사가 항상 올바르지 않습니다.

char c = 0; 
    istream is; 
    ostream os; 
std::streamsize iter = 0; 
is.get(c); 
while (istr && ostr) 
{ 
    ++iter; 
    os.put(c); 
    is.get(c); 
} 
return iter; 

: 다음 코드를 사용하여 바이트에 의해 내가 ostream에 바이트에 istream로부터 파일을 복사 다운로드 진행 상황을 계산하기 위해 stat 명령으로 확인) 대부분 iter는이 숫자에 도달하지 않지만 1048573에서 1048575까지 1에서 3 바이트만큼 작은 값을 갖습니다.
매우 작은 경우 정확한 크기를 측정합니다. 또한 is.fail()을 검사하여 측정 값이 올바르지 않은 경우 failbit가 설정되었음을 알았습니다.
이 문제는 바이너리 파일, 서버와의 연결 불량 또는 코드 문제로 인한 것입니까?

답변

1

입력 스트림과 출력 스트림을 모두 바이너리 모드로 열어야합니다. 그렇지 않으면 플랫폼에 따라 ASCII 코드 10 (\n)을 {13, 10} (\r\n)로 대체하는 행 끝 변환을 수행합니다.

std::ofstream out("data.bin", std::ios::binary); 

이진 스트림을 사용하는 경우 또한 형식의 입력 및 출력 작업 (전. 전자. operator >>operator <<)를 사용해서는 안됩니다. get()put()을 이미 사용하고 있으므로 정상적으로 처리되어야합니다.