fstream Инкапсулирует стандартный ввод-вывод. Я не буду рассматривать расширения этого класса под UNIX, ведь все равно программируем под Windows. Эти самые расширения касаются в основном прав доступа, по умолчанию 666 - allow all. В общем техника работы с этим классом такова. Сначала создается экземпляр, конструктором , первым параметром которого является имя файла, а вторым - режимы открытия файла. Как класс, произведенный от iostream, он инкапсулирует операторы включения и исключения "<<" и ">>". В общем-то с помощью них и производится работа с файлом. Режимы открытия класса - константы ios_base, имеют следующие значения: - ios_base::in
- Открытие для чтения.
- ios_base::out
- Открытие для записи.
- ios_base::app
- Автоматически переставляет указатель текущего символа потока в конец.
- ios_base::binary
- Открытие файла в бинарном режиме.
- ios_base::trunc
- Усекает поток после открытия.
Эти варианты сочетаются бинарным or, например ios_base::in|ios_base::out. Последнее открывает двух сторонний поток для ввода и вывода. Думаю, глубоко уходить в дебри этого класса мы не будем, приведу пример его использования: #pragma hdrstop #include <fstream> #include <conio.h> #include <string.h> using namespace std; #define nl '\n' //---------------------------------------------------------------------------
#pragma argsused int main(int argc, char* argv[]) { fstream str("c:\\test.txt",ios_base::in|ios_base::out|ios_base::trunc); for(int i=0;i<5;i++) { char s[100]; cin>>s; str<<s<<'\n'; }; str.seekp(0); while(!str.eof()) { char s[100]; str.getline(s,100,'\n'); cout<<s<<'\n'; }; getch(); str.close(); return 0; }
Вот так. ifstream, ofstream Не являются предками fstream, как можно было предположить, а являются производными basic_istream и basic_ostream. В общем-то разница небольшая, поскольку fstream является производным iostream, инкапсулирующего оба последних класса. По большом счету все значимые события эти классы унаследовали от базовых. Эти классы предназначены только для ввода и вывода соотвественно. Это в некоторой степени ограничивает их возможности, но никто вроде бы не жаловался :). |