2010-10-29 2 views
6

Windows 프로그래밍의 큰 즐거움 중 하나는 Windows가 지원하지 않는 모든 파일 열기 호출에 'wb'또는 'rb'또는 ios :: binary를 저장하는 것입니다. 모든 0x13을 즐겁게 변환하십시오.Createfile()에 바이너리 플래그가없는 이유는 무엇입니까?

나는 특정 플래그를 얻기 위해 Createfile()을 사용하는 멋지게 표준 코드를 변환해야했습니다. 그리고 나에게는 이진을 지정할 방법이 없다는 것이 나에게 들렸습니다.
어떻게 알 수 있습니까? 나는 정말로 내 MP4 스트림에서 바이트를 변경하지 않으려 고 고맙습니다.

+0

질문을 이해할 수 없습니다. 파일은 바이너리 모드로 열리므로 CR \ LF는 변경되지 않습니다. – ruslik

+0

항상 바이너리 모드로 열림을 인식하지 못했습니다. 바이너리 모드는 윈도우 위의 기능이기 때문에 CreateFile은 FILE의 윈도우즈 전용 버전이므로이 윈도우즈 만 기능을 수행 할 것이라고 논리적으로 보입니다 - 또는 적어도 워드 프로세서에서 언급하십시오. –

+0

텍스트 모드는 Windows 전용 기능이 아닙니다 : 필요합니다. 단일 LF를 사용하여 회선을 종료하지 않는 모든 시스템에서 예를 들어, Pre-X Macs에서는 VAX의 일부 파일 유형이 테이블로 취급되고 줄을 나타내는 행이 "텍스트"파일과 매우 다르게 저장된다는 소식을 들었습니다. 그러나 DB- 같은 사용. –

답변

8

CreateFile이 "텍스트 모드"/ 개행 변환을 수행하지 않기 때문에. 이들은 CRT의 FILE 또는 C++의 iostream 중 하나에서 상위 레벨에서 처리됩니다.

+0

Createfile은 Windows와 동등한 수준의 낮은 수준의 FILE로 생각하지 않았습니다. 나는 MS에 모든 것이 Windows라고 가정하므로 cr/lf를 작성하고 cr/lf를 읽으므로 변환 할 필요가 없습니다. –

+0

@Martin Beckett : 사실,'CreateFile()'함수의 이름은 잘못 붙어 있습니다. 그것은 많은 다른 유형의 리소스 (폴더, 드라이브, 직렬/병렬 포트 등)를 여는 데 사용됩니다. 텍스트/바이너리의 대부분은 텍스트를 전송하지 않기 때문에 의미가 없습니다. –

+1

CreateFile은 ZwCreateFile 커널 함수에 대한 사용자 모드 인터페이스이므로 사용자 모드에서 얻을 수있는 수준의 낮은 수준입니다. – Gerald

1

Windows OS 때문에 모든 파일이 바이너리이기 때문에 바이너리 또는 텍스트 플래그를 지정할 수 없습니다! wb 및 rb 옵션은 C IO 스트림 기능의 일부로, 개발자가 텍스트 파일을 읽고 쓸 수 있도록 CR/LF를 LF 변환을 수행하는 데 도움이되도록 DOS/Windows에서만 유용합니다.

6

Windows API에 관한 한 모든 것이 바이너리입니다. 개인적으로 나는 그것을 그렇게 선호한다. 나는 표준 라이브러리에 "텍스트 모드"를 사용하지 않는다.

+0

+1 : 전적으로 동의합니다. 특히 많은 상위 수준 도구가 텍스트를 읽는 것을 알고있을 때만 CR/LF를 필터링합니다. 예를 들어''표준 라이브러리는'연산자'>>를'std :: string'과 함께 사용할 때 필터링을하지만,'get (char *, streamsize)'를 사용할 때는 필터링하지 않습니다. –

관련 문제