Lect12
.pdfСозданиефайловогопотокаи открытиефайла
Файловыйпотокможетбытьсвязанс файломследующимиспособами:
◦Присозданииобъектапотока,спомощью конструктораспараметрами
◦Привызовеметодаopen
Проверкауспешностиоткрытияпотока выполняетсяпутемпроверкифлагов объектаилиегопроверкойвусловии.
Созданиефайловогопотокаи
открытиефайла
1) Создание потока одновременно с открытием
fstream(const char* name, int omode,
int = filebuf::openprot )
имя-класса имя-объекта;
имя-объекта.open(const char *fileName, int mode = значение_по_умолчанию,
int protection =
значение_по_умолчанию);
Созданиефайловогопотокаи открытиефайла
Значенияпоумолчаниюопределяются тем,какойименнопотокиспользуется: чтенияилизаписи.
Дляifstream |
mode = ios::in |
Дляofstream |
mode = ios::out |
Дляfstream |
mode = ios::in | ios::out |
protection = filebuf::openprot (Unix
режим0666)
Режимыоткрытияфайла
enum open_mode { |
для чтения |
|
// открыть только |
||
in |
= |
0x01, |
// открыть только |
для записи |
|
out |
= |
0x02, |
// установить указатель на конец файла |
||
ate |
= |
0x04, |
// дописывать данные в конец файла |
||
app |
= |
0x08, |
// усечь файл до нулевой длины |
||
trunc |
= |
0x10, |
// если файл не |
существует, ошибка открытия |
|
nocreate |
= |
0x20, |
// если файл уже существует, ошибка открытия |
||
noreplace = |
0x40, |
|
// открыть файл для двоичного обмена |
||
binary |
= |
0x80 |
}; |
|
|
Завершениеработысфайлом
Файлпозавершенииработысним крайнежелательнозакрыть:
◦этопозволитдругимпроцессамработатьс ним
◦этоуменьшитколичествооткрытых файловыхдескриптороввсистеме
◦это,вслучаеofstream,сброситвсебуферы наноситель.
Закрытиевыполняетсяспомощью методапотокаclose();
Примерыоткрытиятекстовых файлов
// Дописывание в конец ofstream ofile("data1",
ios::app | ios::nocreate); ofile << k << z <<endl; ofile.close();
// Ввод
ifstream ifs("data2", ios::in); ifs >> t >> w;
ifs.close();
Примерыоткрытиятекстовых файлов
// Ввод и вывод fstream inout("data3",
ios::in | ios::out); inout << i;
/* Здесь другие операции и позиционирование */
inout >> j; inout.close();
Примерработыстекстовыми файлами
Напишемпрограмму,которая перенесетвновыйфайлизисходного всенеотрицательныезначения.
ПримербылнаписандляОСLinux, исходныйицелевойфайлы находилисьвдомашнемкаталоге пользователя:/home/max/file_from.txt и/home/max/file_to.txt
Примерработыстекстовыми файлами
#include <iostream> #include <fstream>
using namespace std;
int main(int argc, char *argv[]) { ifstream f1("/home/max/file_from.txt");
if (!f1) {
cerr << "Неудалосьоткрыть файлfile_from" << endl;
return 1;
}
Примерработыстекстовыми
файлами
ofstream f2("/home/max/file_to.txt"); if (!f2) {
cerr << "Неудалосьоткрыть файлfile_to" << endl;
return 1;
}
int rdNum; while(!f1.eof()) { f1 >> rdNum;
if (rdNum >= 0) {
f2 << rdNum << " ";
}
}