в файлах C++: какой файл, открытый как iOS:: двоичный файл отличается от одного открытого как iOS:: двоичный файл | iOS::?

если я открыл файл как:

ofstream file("file.dat",ios::binary);

или

ofstream file("file.dat",ios::binary | ios::out);

что может я делать с файлом, открытым в последней форме, которую я не могу сделать с бывшей формой и наоборот

спасибо

5
задан Alan_AI 9 February 2010 в 17:41
поделиться

4 ответа

спасибо всем, кто ответил мне: Я проверил несколько кодов в зависимости от того, на что мне ответили, и пришел к следующему заключению:

использование ofstream: ios :: out используется по умолчанию, даже если ничего не указано, но если вы использовали только ios :: in с ofstream, ошибок компиляции нет (если вы не используете read () или >> или какой-нибудь объект ifstream), но файлы не будут записаны.

с использованием ifstream: ios :: in используется по умолчанию, даже если ничего не указано, но если вы использовали только ios :: out с ifstream, ошибок компиляции нет (если вы не используете write () или << или какой-либо объект ofstream), но вы не можете прочитать какую-либо информацию из файла.

с использованием fstream: без значений по умолчанию, вы должны явно указать, что вы собираетесь делать. В противном случае ошибки компиляции нет, но вы просто не получите то, что хотите.

Что касается исходного вопроса, оба работают одинаково!

1
ответ дан 13 December 2019 в 22:07
поделиться

В большинстве случаев я ожидал, что не будет никакой разницы, хотя кажется, что технически это может быть связано с конкретной реализацией.

В моей реализации (gcc 3.4.3) open for the ofstream использует режим ios ::: out в вызове ofstream-> open () независимо от того, что указано в конструкторе, поэтому это чисто необязательно. При использовании fstream это не так, и его необходимо указать явно.

2
ответ дан 13 December 2019 в 22:07
поделиться

Ознакомившись со стандартом, в разделе 27.8.1.3 обсуждаются различные модификаторы ios (например, ios :: in и ios :: out ) и отображает их в параметры C fopen () . Согласно Стандарту, если для открытия файла не указаны модификаторы, открытие завершается ошибкой.

В 27.8.1.9 мы обнаруживаем, что ofstream работает так же, но с автоматически заданным ios :: out . Следовательно, ответ на исходный вопрос заключается в том, что оба будут работать одинаково.

Я не знаю, почему люди находят это открытие с fstream без ios :: in или ios :: out , но мое чтение стандарта говорит, что это не должно работать. Мне было бы интересно узнать о чтении 27.8.1.3 других людей.

2
ответ дан 13 December 2019 в 22:07
поделиться

Для ofstream по умолчанию используется ios::out, так что разницы нет. Я считаю, что единственный раз, когда указание ios::out имеет значение, это если вы используете fstream, который может быть открыт для чтения или записи, или для того и другого.

5
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: