В чем разница между:
fstream texfile;
textfile.open("Test.txt");
а также
ofstream textfile;
textfile.open("Test.txt");
Одинаковая ли их функция?
В чем разница между:
fstream texfile;
textfile.open("Test.txt");
а также
ofstream textfile;
textfile.open("Test.txt");
Одинаковая ли их функция?
ofstream
имеет только методы вывода, поэтому, например, если вы попробуете textfile >> whatever
, он не скомпилируется. fstream
можно использовать для ввода и вывода, хотя то, что будет работать, зависит от флагов, которые вы передаете конструктору / open
.
std::string s;
std::ofstream ostream("file");
std::fstream stream("file", stream.out);
ostream >> s; // compiler error
stream >> s; // no compiler error, but operation will fail.
В комментариях есть еще несколько замечательных моментов.
ofstream::open
по умолчанию имеет значение openmode ios_base::out
, а fstream::open
по умолчанию имеет значение ios_base::in | ios_base::out
.
- person M.M; 24.04.2014
std::fstream
попытка открыть файл завершится ошибкой, если файл не существует. Это отличается от std::ofstream
, который создает файл, если его не удается найти. Нужно было бы добавить флаг std::ios_base::trunc
в маску при вызове конструктора или open()
в std::fstream
.
- person 0x499602D2; 24.04.2014
Взгляните на их страницы на cplusplus.com здесь и здесь.
ofstream
наследуется от ostream
. fstream
наследуется от iostream
, который наследуется как от istream
, так и от stream
. Обычно ofstream
поддерживает только операции вывода (т. е. текстовый файл ‹‹ «hello»), а fstream
поддерживает как операции вывода, так и операции ввода, но в зависимости от флагов, заданных при открытии файла. В вашем примере открытый режим по умолчанию ios_base::in | ios_base::out
. Режим открытия ofstream
по умолчанию — ios_base::out
. Более того, для объектов ofstream всегда устанавливается ios_base::out
(даже если явно не задано в режиме аргумента).
Используйте ofstream
, когда textfile
только для вывода, ifstream
только для ввода, fstream
и для ввода, и для вывода. Это делает ваше намерение более очевидным.
c++ fstream
. Каковы другие преимущества cppreference.com по сравнению с cplusplus.com?
- person Danqi Wang; 24.04.2014