Я пытался использовать fopen в C, второй параметр является открытым режимом. Эти два режима "r" и "rb" имеют тенденцию смущать меня много. Кажется, что они - то же. Но иногда лучше использовать "rb". Так, почему "r" существует? Объясните это мне подробно или с примерами.Спасибо.
Для открытия текстовых файлов следует использовать "r"
. Разные операционные системы имеют несколько разные способы хранения текста, и при этом выполняются корректные переводы, так что Вам не нужно знать об идиосинкриях локальной операционной системы. Например, вы будете знать, что новые строки всегда будут появляться в виде простого "\n"
, независимо от того, где выполняется код.
Вам следует использовать "rb"
, если вы открываете нетекстовые файлы, потому что в этом случае переводы не подходят.
На Linux и Unix в целом "r"
и "rb"
одинаковы. Точнее, указатель FILE
, полученный с помощью fopen()
ing файла в текстовом и двоичном режиме ведет себя в Unix одинаково. В окнах и вообще в системах, использующих более одного символа для обозначения "newlines", файл, открытый в текстовом режиме, ведет себя так, как если бы все эти символы были только одним символом, '\n'
.
Если вы хотите переносить чтение/запись текстовых файлов в любую систему, используйте "r"
и "w"
в fopen()
. Это гарантирует правильную запись и чтение файлов. Если Вы открываете двоичный файл, используйте "rb"
и "wb"
, чтобы при неудачном переводе новой строки Ваши данные не испортились.
Обратите внимание, что следствием того, что базовая система выполняет перевод новой строки за Вас, является то, что Вы не можете определить количество байт, которое Вы можете прочитать из файла, используя fseek(file, 0, SEEK_END).
Наконец, см. Какая разница между текстом и двоичными входами/выходами? на comp.lang.c FAQs.
Используйте «Rb», чтобы открыть двоичный файл. Затем байты файла не будут закодированы при их прочитании
Это имеет значение в Windows, по крайней мере,. Смотрите эту ссылку для деталей.