если я открыл файл как:
ofstream file("file.dat",ios::binary);
или
ofstream file("file.dat",ios::binary | ios::out);
что может я делать с файлом, открытым в последней форме, которую я не могу сделать с бывшей формой и наоборот
спасибо
спасибо всем, кто ответил мне: Я проверил несколько кодов в зависимости от того, на что мне ответили, и пришел к следующему заключению:
использование ofstream: ios :: out используется по умолчанию, даже если ничего не указано, но если вы использовали только ios :: in с ofstream, ошибок компиляции нет (если вы не используете read () или >> или какой-нибудь объект ifstream), но файлы не будут записаны.
с использованием ifstream: ios :: in используется по умолчанию, даже если ничего не указано, но если вы использовали только ios :: out с ifstream, ошибок компиляции нет (если вы не используете write () или << или какой-либо объект ofstream), но вы не можете прочитать какую-либо информацию из файла.
с использованием fstream: без значений по умолчанию, вы должны явно указать, что вы собираетесь делать. В противном случае ошибки компиляции нет, но вы просто не получите то, что хотите.
Что касается исходного вопроса, оба работают одинаково!
В большинстве случаев я ожидал, что не будет никакой разницы, хотя кажется, что технически это может быть связано с конкретной реализацией.
В моей реализации (gcc 3.4.3) open for the ofstream использует режим ios ::: out в вызове ofstream-> open () независимо от того, что указано в конструкторе, поэтому это чисто необязательно. При использовании fstream это не так, и его необходимо указать явно.
Ознакомившись со стандартом, в разделе 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 других людей.
Для ofstream по умолчанию используется ios::out
, так что разницы нет. Я считаю, что единственный раз, когда указание ios::out имеет значение, это если вы используете fstream, который может быть открыт для чтения или записи, или для того и другого.