2011-09-16 4 views
1

소스를 the site에서 다운로드했는데 테스트를 실행할 때 모든 압축 파일의 압축이 풀린 파일을 다른 LF가 아닌 CR + LF 줄 끝으로 표시합니다. 원본에서.mingw를 통해 Windows에서 gzstream : CR + LF를 삽입

나는 소스에서 찾고 있어요하지만 그들은 이미 바이너리 모드로 파일 여는 것처럼 보인다 그것을 매우 깨끗 보이고 있기 때문에

gzstreambuf* gzstreambuf::open(const char* name, int open_mode) { 
    if (is_open()) 
     return (gzstreambuf*)0; 
    mode = open_mode; 
    // no append nor read/write mode 
    if ((mode & std::ios::ate) || (mode & std::ios::app) 
     || ((mode & std::ios::in) && (mode & std::ios::out))) 
     return (gzstreambuf*)0; 
    char fmode[10]; 
    char* fmodeptr = fmode; 
    if (mode & std::ios::in) 
     *fmodeptr++ = 'r'; 
    else if (mode & std::ios::out) 
     *fmodeptr++ = 'w'; 
    *fmodeptr++ = 'b'; 
    *fmodeptr = '\0'; 
    file = gzopen(name, fmode); 
    if (file == 0) 
     return (gzstreambuf*)0; 
    opened = 1; 
    return this; 
} 

난 정말 코드의이 비트를 사용하고 싶습니다를 mingw gcc에서 쉽게 컴파일됩니다. 유일한 문제는 내가 해결할 수있는 슬라이드를 허용 할 수있는 까다로운 비즈니스입니다.

+0

CR + LF를 주입하는 코드가 맞습니까? 아마도 다른 프로그램입니다 (열기/저장 중에 편집기 사용) –

+0

이 코드는 테스트 파일을 압축 및 압축 해제하기 위해이 함수를 호출합니다. 커맨드 라인에서 실행합니다 (makefile도 마찬가지입니다). 나는 그것이'\ n \ '을'\ r \ n' 번역으로 바꾸는 zlib의'gzopen'인지를 판단 할 수 없습니다. –

+0

파일에 잘못된 CR + LF가 있는지 어떻게 확인하고 있습니까? 압축 및 압축 해제 전후에 파일을 컴파일하기 위해 바이너리 편집기를 사용해 보셨습니까? –

답변

2

해결 방법을 성공적으로 구현했습니다. gzstream이 멋지게 보이지만 총알을 피하고 zlib을 직접 사용하는 코드를 작성했습니다. 모두입니다. zlib에는 도우미가 숨겨져 있기 때문에 zlib.h에는 도움이되는 의견이 많기 때문에 좋지 않습니다.

ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen));은 충분히 간단합니다.

물론 더 이상 가짜 0x0D 캐리지 리턴 문자에는 문제가 없습니다.

1

std :: ios :: binary는 어디에 있습니까?

UNIX 플랫폼에서는 종종 불필요한 경우가 있으므로 일부 사람들은이를 생략합니다.

+0

글쎄, 나는 그것을'gzstreambuf :: open'에 전달하고 있었다. 나는 gdb에서 gzopen이 바이너리 플래그로 호출되는 것을 확인했다. –

관련 문제