Слайд 2Відкриття/ закриття файлів
FILE *p1,*p2;
p1=fopen(“шлях_до_файлу”,”режим”);
”c:\\test\\ish.dan”
Режими:
r rb r+ rb+
w wb w+ wb+
a ab a+ ab+
fclose(p1);
Слайд 3Форматне введення/виведення
fscanf(p1,”формати”, адреси змінних);
fprintf(p2,”шаблон”,список змінних);
fputs(”рядок”, p2);
Слайд 4Послідовний доступ
Читання/запис – покажчик здвигається на 1 елемент.
rewind(p1); - показчик
в початок
Приклад.
В файлі записано матрицю розміром 2х3. Скласти
програму, яка знаходить мінімальний елемент матриці. Результат дописати в файл.
Слайд 5Прямий доступ
Позиціонування
fseek(p1,зсув, початок)
Константи початку:
0 – від початку файлу
1 –
від поточної позиції
2 – від кінця
fseek(p1,2l,0);
Слайд 6Прямий доступ
Визначення позиції
m=ftell(p1)
Приклад. У файлі записано рядок:
21.5 -12.6
fseеk(p1,0l,0)
-> 21.5
fseеk(p1,1l,0) -> 1.5
fseеk(p1,2l,0) -> 0.5
fseеk(p1,3l,0) ->
5
fseеk(p1,4l,0) -> -12.6
Слайд 7Введення/виведення бінарних файлів стандартними засобами
fread(покажчик рез-ту, розмір ел-та, кільк-сть ел-тів,
покажчик файлу)
fwrite(покажчик виведення інф, розмір ел-та, кільк-сть ел-тів, покажчик файлу)
Слайд 8Файл як потік
Потоки для роботи з файлами створюються як об’єкти
класів:
ofstream - для виведення (запису) даних в файл;
ifstream -
для ввведення (читання) даних з файла;
fstream - для читання та для запису даних (двунаправлений обмін).
Слайд 9Файл як потік
Файловий потік створюється шляхом підключення до конкретного файла
шляхом використання функції open(), яка наслідується файловими класами ofstream, ifsream,
fstream
Її синтаксис:
void open(const char *fileName,
int mode = умалчиваемое_значение,
int protection = умалчиваемое_значение);
Слайд 10Файл як потік
Mode - флаг, який визначає режим роботи з
файлом:
enum ios::open_mode {
in = 0x01, //
Открыть только для чтения.
out = 0x02, // Открыть только для записи.
ate = 0x04, // При открытии искать конец файла.
арр = 0x08, // Дописывать данные в конец файла.
trunc = 0x10, // Вместо существующего создать новый файл.
nocreate = 0x20, // Не открывать новый файл (Для
// несуществующего файла функция open выдаст ошибку).
noreplace = 0x40, // Не открывать существующий файл.
// (Для существующего выходного файла, не имеющего режимов ate
// или арр, выдать ошибку).
binary = 0x80 // Открыть для двоичного (не текстового) обмена.
};
Слайд 11Файл як поток
#include
ifstream ofstream
Флаги стану (методи об'єктів)
eof() – кінець файлу
bad() –
помилкова операція
fail() – помилкова операція або не може бути виконана
good()
– всі операції виконуються
Слайд 12Файл введення
ifstream fin(“test.dan”);
fin >>x;
fin.get(); - повертає символ (в т.ч. EOF)
fin.get(k);
- повертає покажчик на потік (fin)
fin.getline(char []; razmer);
fin.ignore(кіл-ть, символ_роздільник) –
пропустити частину рядка
fin.ignore(30,’\n’);
Слайд 13Файл виведення
ofstream fout(“ім’я_файлу”,режим);
ios::app
ios::ate
ios::trunc (за замовчуванням)
ios::nocreate
fout
Слайд 14Двійкові файли
ifstream f1(“ім’я_файлу”,ios::binary);
ofstream f2(“ім’я_файлу”, ios::binary);
f1.read((char*) адреса_змінної, sizeof (змінна))
f2.write((char*) адреса_змінної, sizeof
(змінна))
Слайд 15Двійкові файли
ofstream os("text.txt", ios::binary);
int a[] = { 1492, 31562,
290893,382 }; os.write((char*)a,sizeof (a));
ifstream is("text.txt", ios::binary); int b[4]; is.read((char*)(b),sizeof(b));
is.close();
Слайд 16Приклад
#include
#include
void main()
{
clrscr(); float x=12.89;
ofstream fout("ggg",ios::binary);
fout.write((char *)&x, sizeof (x));
fout.close();
Слайд 17Приклад
float x=9.3;
ifstream fin("ggg",ios::binary);
fin.read((char *)&x, sizeof (x));
cout