- •Тема. Створення та оброблення файлів даних
- •Основні функції, константи, типи та макроси для роботи з файлами
- •Оголошення змінних типу файл
- •Відкриття файлу
- •Використання функцій fread() та fwrite()
- •Функції fscanf() та fprintf()
- •Стандартні потоки
- •Перенаправлення потоків
- •Зчитування та запис текстових файлів
- •Зчитування та запис двійкових (бінарних) файлів Функції get() та put()
- •Функції read() та write()
Зчитування та запис текстових файлів
Операція запису у потік має вигляд: Потокова_зміна<<змінна;
Операція зчитування у потік має вигляд: Потокова_зміна>>змінна;
Приклад запису у файл чисел:
#include <iostream> #include <fstream> using namespace std; int main() { int i, n; double a; |
|
ofstream f; |
//оголошуємо потокову зміну |
f.open("c:\\text.txt", ios::out); |
|
//f.open("c:\\text.txt"); |
//ще один з варіантів |
cout<<"n="; cin>>n; |
//повідомлення на екран //задаємо кількість чисел |
for (i=0; i<n; i++) { printf("a[%d]=",1+i); cin>>a; f<<a<<"\t"; } f.close(); return 0; } |
//повідомлення на екран //зчитування значення в змінну а //запис змінної а у потік(файл) та запис знаку табуляції |
Результат запису:
Приклад зчитування перших 5 чисел з файлу.
#include <iostream> #include <fstream> using namespace std; int main() { int n=5; float a; fstream F; |
|
F.open("c:\\text.txt"); if (F) { |
|
for (i=0; i<n; i++) { F>>a; printf("a[%d] = %2.1f\n",1+i,a); } |
|
F.close(); } else cout<<"Файл не відкрито "<<endl; return 0; } |
|
Результат:
Зчитування та запис двійкових (бінарних) файлів Функції get() та put()
istream &get(char &ch);
ostream & put(char ch);
Функція get() зчитує один символ з потоку та записує його значення в ch. Вона повертає посилання на потік. Функція put() записує ch у потік та повертає посилання на цей потік.
Функції використовують для текстових та бінарних файлів. При роботі з бінарними файлами необхідно відкрити їх в режимі ios::binary.
Приклад здійснює зчитування файла в бінарному ркежимі будь-який файл.
#include <iostream> #include <fstream> using namespace std; int main() { char sf[40]; char ch; |
|
fstream F; |
//повязуємо змінну F з потоком для режиму зчитування |
printf("Введіть ім_я файлу: "); gets(sf); |
|
F.open(sf, ios::in | ios::binary); |
//відкриття файлу для зчитування в бінарному режимі |
if (F) { |
|
//варіант зчитування №1 /* while (F) { F.get (ch); cout << ch; } */ |
// цикл зчитує посимвольно відкритий файл |
//варіант зчитування №2 while (F.get(ch)) cout << ch; |
|
F.close(); } else
|
|
cout<<"Помилка відкриття файлу "<<endl; return 0; } |
|
Приклад ілюструє запис у файл по одному символу введеного символьного рядка.
#include <string.h> #include <iostream> #include <fstream> using namespace std; int main() { |
|
int i=0; char sf[80], str[80]; char ch; |
|
ofstream F; |
//повязуємо змінну F з потоком для режиму запису |
printf("Введіть ім_я файлу: "); gets(sf); |
|
F.open(sf, ios::out | ios::binary); |
// відкриваємо файл для запису в бінарному режимі |
if (F) { |
|
printf("Введіть символьний рядок: "); gets(str); |
|
for(int i=0;i < strlen(str);i++) F.put(str[i]); |
//посимвольно записуємо введений рядок |
F.close(); } |
|
else cout<<"Виникла помилка "<<endl; return 0; } |
|
Результат виконання:
Введіть ім_я файлу: c:\dat.txt
Введіть символьний рядок: I love C++.
Результат запису у файл: