2010-10-29 43 views
6

Một trong những niềm vui tuyệt vời của lập trình cửa sổ là nhớ đặt 'wb' hoặc 'rb' hoặc ios :: binary trong tất cả các cuộc gọi mở tệp để Windows không vui vẻ chuyển đổi tất cả các 0x13 của bạn.Tại sao Createfile() không có cờ nhị phân

Tôi chỉ phải chuyển đổi một loạt mã tiêu chuẩn độc đáo để sử dụng Createfile() để nhận được một lá cờ nhất định - và nó xảy ra với tôi rằng không có cách nào để chỉ định nhị phân.
Làm cách nào để biết? Tôi thực sự không muốn nó thay đổi byte trong dòng MP4 của tôi cảm ơn bạn rất nhiều.

+0

Tôi không thể hiểu được câu hỏi. Các tập tin được mở ở chế độ nhị phân, vì vậy không có CR \ LF nào bị thay đổi. – ruslik

+0

Không nhận ra nó luôn mở ở chế độ nhị phân. Kể từ khi chế độ nhị phân là một cửa sổ sonly tính năng và CreateFile là một cửa sổ chỉ phiên bản của FILE nó có vẻ hợp lý rằng nó sẽ làm cửa sổ này chỉ hoạt động - hoặc ít nhất đề cập đến nó trong tài liệu –

+0

Chế độ văn bản không phải là một tính năng chỉ có Windows: nó cần thiết trên bất kỳ máy nào không sử dụng một LF đơn lẻ để chấm dứt các dòng. Ví dụ, các máy Mac trước X và tôi đã nghe một số loại tệp trên VAX được/được xử lý nhiều hơn như một bảng, với các dòng biểu diễn các hàng và toàn bộ điều được lưu trữ rất khác với các tệp "văn bản" - nhưng tốt hơn cho DB- thích sử dụng. –

Trả lời

8

Vì CreateFile không thực hiện chuyển đổi "chế độ văn bản"/chuyển đổi dòng mới. Chúng được xử lý ở mức cao hơn, hoặc trong FILE cho CRT hoặc iostreams cho C++.

+0

Không bao giờ thực sự nghĩ về Createfile là một FILE cấp thấp hơn, giống như một cửa sổ chỉ tương đương. Tôi giả sử MS tất cả mọi thứ là Windows, do đó bạn viết cr/lf và đọc cr/lf, không cần phải chuyển đổi. –

+0

@Martin Beckett: thực ra, hàm 'CreateFile()' chỉ có tên kém. Nó được sử dụng để mở nhiều, nhiều loại tài nguyên khác (thư mục, ổ đĩa, cổng nối tiếp/song song, v.v.), cho hầu hết văn bản/nhị phân nào không có ý nghĩa bởi vì bạn không chuyển văn bản. –

+1

CreateFile là giao diện chế độ người dùng với hàm hạt nhân ZwCreateFile, vì vậy nó ở mức thấp như bạn có thể nhận được trong chế độ người dùng. – Gerald

1

Bạn không thể chỉ định cờ nhị phân hoặc cờ văn bản, vì với hệ điều hành Windows, tất cả các tệp đều là nhị phân! Các tùy chọn wb và rb được giới thiệu như là một phần mềm, như một phần của chức năng dòng C IO, và thậm chí chỉ trên DOS/Windows, để giúp nhà phát triển đọc và ghi các tệp văn bản và thực hiện chuyển đổi CR/LF sang LF.

6

Mọi thứ đều là nhị phân xa như API Windows. Cá nhân tôi thích nó theo cách đó. Tôi không bao giờ sử dụng "chế độ văn bản" trong nội dung thư viện chuẩn.

+0

+1: Tôi hoàn toàn đồng ý. Đặc biệt là nhiều công cụ cấp cao hơn chỉ lọc CR/LF khi chúng biết bạn đang đọc văn bản. Ví dụ, các bộ lọc thư viện chuẩn '' sau đó sử dụng 'toán tử >>' với 'std :: string' nhưng không sử dụng' get (char *, streamize) '. –

Các vấn đề liên quan