Обробка файлів за допомогою класів C++
Обробка файлів використовується для постійного зберігання даних у комп’ютері. Використовуючи обробку файлів, ми можемо зберігати наші дані у вторинній пам’яті (жорсткому диску).
Як досягти обробки файлів
Щоб досягти обробки файлів, нам потрібно виконати наступні кроки:-
КРОК 1. Назва файлу
КРОК 2 - Відкриття файлу
КРОК 3 - Запис даних у файл
КРОК 4. Зчитування даних із файлу
КРОК 5 - Закриття файлу.
Потоки на C++: -
Ми надаємо вхідні дані програмі, що виконується, а програма виконання повертає результат. Послідовність байтів, наданих як вхідні дані програмі, що виконується, і послідовність байтів, які надходять як вихідні дані програми, що виконується, називаються потоком. Іншими словами, потоки - це не що інше, як потік даних у послідовності.
Операція введення та виведення між програмою, що виконується, і такими пристроями, як клавіатура та монітор, відома як консольна операція вводу-виводу. Операція введення та виведення між виконуваною програмою та файлами відома як операція дискового введення-виведення.
Класи для операцій потоку файлів: -
Система введення-виведення C++ містить набір класів, які визначають методи обробки файлів. До них належать класи ifstream, ofstream і fstream. Ці класи є похідними від fstream і відповідного класу iostream. Ці класи, розроблені для керування файлами диска, оголошені у fstream, тому ми повинні включити цей файл у будь-яку програму, яка використовує файли.
1. ios:-
- ios означає вхідний вихідний потік.
- Цей клас є базовим для інших класів у цій ієрархії класів.
- Цей клас містить необхідні засоби, які використовуються всіма іншими похідними класами для операцій введення та виведення.
2. istream:-
- istream означає вхідний потік.
- Цей клас походить від класу «ios».
- Цей клас обробляє вхідний потік.
- Оператор вилучення (>>) перевантажений у цьому класі для обробки вхідних потоків від файлів до виконання програми.
- Цей клас оголошує такі функції введення, як get(), getline() і read().
3. з іншого боку: -
- ostream означає вихідний потік.
- Цей клас походить від класу «ios».
- Цей клас обробляє вихідний потік.
- Оператор вставки ( < <) перевантажений у цьому класі для обробки вихідних потоків до файлів під час виконання програми.
- Цей клас оголошує такі функції виведення, як put() і write().
4. streambuf:-
- Цей клас містить покажчик, який вказує на буфер, який використовується для керування вхідними та вихідними потоками.
5. fstreambase:-
- Цей клас забезпечує операції, загальні для файлових потоків. Служить основою для класів fstream, ifstream і ofstream.
- Цей клас містить функції open() і close().
6. ifstream:-
- Цей клас забезпечує операції введення.
- Він містить функцію open() із режимом введення за замовчуванням.
- Успадковує функції get(), getline(), read(), seekg() і tellg() від istream.
7. ofstream:-
- Цей клас забезпечує операції виведення.
- Він містить функцію open() із режимом виведення за замовчуванням.
- Успадковує функції put(), write(), seekp() і tellp() від ostream.
8. fstream:-
- Цей клас забезпечує підтримку одночасних операцій введення та виведення.
- Успадковує всі функції від класів istream і ostream через iostream.
9. filebuf:-
- Його призначення — налаштувати файлові буфери на читання та запис.
- Ми також можемо використовувати функцію члена файлового буфера, щоб визначити довжину файлу.
У C++ файли в основному обробляються за допомогою трьох класів fstream, ifstream, ofstream, доступних у файлі заголовка fstream.
ofstream: Потоковий клас для запису у файли
ifstream: Потоковий клас для читання з файлів
fstream: Потоковий клас для читання та запису з/у файли.
Тепер перший крок, щоб відкрити певний файл для операції читання або запису. Ми можемо відкрити файл за допомогою
1. передача імені файлу в конструкторі під час створення об'єкта
2. за допомогою відкритого методу
Для напр.
Відкрити файл за допомогою конструктора
ifstream (const char* ім’я файлу, режим ios_base::openmode = ios_base::in);
ifstream fin(ім'я файлу, openmode) за замовчуванням openmode = ios::in
ifstream fin(ім'я файлу);Відкрийте файл за допомогою відкритого методу
Виклик конструктора за замовчуванням
кінець ifstream;
fin.open(ім'я файлу, відкритий режим)
fin.open(ім'я файлу);
Режими:
| Постійний член | Виступає за | Доступ |
|---|---|---|
| в * | введення | Файл відкрито для читання: внутрішній буфер потоку підтримує операції введення. |
| поза | вихід | Файл відкрито для запису: внутрішній буфер потоку підтримує операції виведення. |
| двійковий | двійковий | Операції виконуються в двійковому режимі, а не в текстовому. |
| їв | в кінці | Позиція виведення починається в кінці файлу. |
| додаток | додавати | Усі операції виведення виконуються в кінці файлу, додаючи його до наявного вмісту. |
| стовбур | урізати | Будь-який вміст, який існував у файлі до його відкриття, відкидається. |
Відкриті режими за замовчуванням:
| ifstream | ios::in |
| ofstream | ios::out |
| fstream | ios::in | ios::out |
Постановка проблеми : для читання та запису файлу на C++.
приклади:
Input : Welcome in techcodeview.com. Best way to learn things. -1 Output : Welcome in techcodeview.com. Best way to learn things.
Нижче наведено реалізацію за допомогою класи ifstream і ofstream .
C++
/* File Handling with C++ using ifstream & ofstream class object*/> /* To write the Content in File*/> /* Then to read the content of file*/> #include> /* fstream header file for ifstream, ofstream,> > fstream classes */> #include> using> namespace> std;> // Driver Code> int> main()> {> > // Creation of ofstream class object> > ofstream fout;> > string line;> > // by default ios::out mode, automatically deletes> > // the content of file. To append the content, open in ios:app> > // fout.open('sample.txt', ios::app)> > fout.open(> 'sample.txt'> );> > // Execute a loop If file successfully opened> > while> (fout) {> > // Read a Line from standard input> > getline(cin, line);> > // Press -1 to exit> > if> (line ==> '-1'> )> > break> ;> > // Write line in file> > fout < < line < < endl;> > }> > // Close the File> > fout.close();> > // Creation of ifstream class object to read the file> > ifstream fin;> > // by default open mode = ios::in mode> > fin.open(> 'sample.txt'> );> > // Execute a loop until EOF (End of File)> > while> (getline(fin, line)) {> > > // Print line (read from file) in Console> > cout < < line < < endl;> > }> > // Close the file> > fin.close();> > return> 0;> }> |
Часова складність: O(n)
Допоміжний простір: O(1)
Нижче наведено реалізацію за допомогою клас fstream .
C++
/* File Handling with C++ using fstream class object */> /* To write the Content in File */> /* Then to read the content of file*/> #include> /* fstream header file for ifstream, ofstream,> > fstream classes */> #include> using> namespace> std;> // Driver Code> int> main()> {> > // Creation of fstream class object> > fstream fio;> > string line;> > // by default openmode = ios::in|ios::out mode> > // Automatically overwrites the content of file, To append> > // the content, open in ios:app> > // fio.open('sample.txt', ios::in|ios::out|ios::app)> > // ios::trunc mode delete all content before open> > fio.open(> 'sample.txt'> , ios::trunc | ios::out | ios::in);> > // Execute a loop If file successfully Opened> > while> (fio) {> > // Read a Line from standard input> > getline(cin, line);> > // Press -1 to exit> > if> (line ==> '-1'> )> > break> ;> > // Write line in file> > fio < < line < < endl;> > }> > // Execute a loop until EOF (End of File)> > // point read pointer at beginning of file> > fio.seekg(0, ios::beg);> > while> (fio) {> > // Read a Line from File> > getline(fio, line);> > // Print line in Console> > cout < < line < < endl;> > }> > // Close the file> > fio.close();> > return> 0;> }> |
Часова складність: O(n)
Допоміжний простір: O(1)
C++
Q: write a single file handling program in c++ to reading and writing data on a file.> #include> #include> > using> namespace> std;> main()> {> > int> rno,fee;> > char> name[50];> > > cout < <> 'Enter the Roll Number:'> ;> > cin>>rno;>> > > cout < <> '
Enter the Name:'> ;> > cin>>ім'я;> > > cout < <> '
Enter the Fee:'> ;> > cin>>плата;> > > ofstream fout(> 'd:/student.doc'> );> > > fout <' ' <' ' /write data to the file student fout.close(); ifstream fin('d:/student.doc'); fin>>rno>>name>>плата; //читання даних з файлу student fin.close(); cout <' ' <' ' < return 0; }> |
Часова складність: O(1)
Допоміжний простір: O(1)
C++
// Q: WA C++ file handling program to read data from the file called student.doc> #include> #include> using> namespace> std;> main()> {> > int> rno,fee;> > char> name[50];> > > ifstream fin(> 'd:/student.doc'> );> > > fin>>rno>>name>>плата;> //read data from the file student> > > fin.close();> > > cout <' ' <' ' < return 0; }> |
Часова складність: O(1)
Допоміжний простір: O(50)