Failu apstrāde nozīmē lasīšanu un rakstīšanu failos (piemēram, .txt .csv utt.), izmantojot C++ standarta bibliotēkas nodrošinātās klases.
- Programmas, kas darbojas RAM, kas nozīmē, ka dati pastāv tikai programmas darbības laikā, kad programma beidzas, visi RAM dati tiek zaudēti automātiski.
- Failu apstrāde ļauj saglabāt datus sekundārajā atmiņā (piemēram, HDD vai SSD), lai tos varētu saglabāt pastāvīgi un tos var saglabāt un piekļūt pat pēc programmas darbības beigām.
- Failu operācijām C++ nodrošina failu straumes klases
galvene, piemēram, ofstream ifstream fstream.
Faila atvēršana
Pirms lasīšanas no faila vai rakstīšanas tajā, mums tas vispirms ir jāatver. Atverot failu, tas tiek ielādēts RAM. Programmā C++ mēs atveram failu, izveidojot tam straumi, izmantojot fstream klase, kas pārstāv faila straumi, t.i., straume faila ievadei un izvadei.
C++fstream str('filename.ext' mode);
kur
- str: Straumei piešķirts nosaukums
- faila nosaukums: Faila nosaukums
- režīmā : atspoguļo veidu, kādā mēs sadarbosimies ar failu.
Failu atvēršanas režīmi
Faila atvēršanas režīms norāda, ka fails ir atvērts lasīšanai, rakstīšanai vai pievienošanai. Zemāk ir visu C++ failu režīmu saraksts:
| Režīms | Apraksts |
|---|---|
| ios::in | Fails atvērts lasīšanai. Ja fails neeksistē, atvēršanas darbība neizdodas. |
| ios::out | Fails atvērts rakstīšanai: iekšējais straumes buferis atbalsta izvades darbības. |
| ios::binārais | Darbības tiek veiktas binārajā režīmā, nevis teksta režīmā. |
| ios::ate | Izvades pozīcija sākas faila beigās. |
| ios::app | Visas izvades darbības notiek faila beigās, pievienojot tā esošajam saturam. |
| ios::stumbrs | Jebkurš saturs, kas failā bija pirms tā atvēršanas, tiek atmests. |
Piemēram ja mēs vēlamies atvērt failu lasīšanai, mēs izmantojam šādu atvēršanas režīmu:
C++fstream filein('file.txt' ios::in);
Līdzīgi, ja vēlamies atvērt failu rakstīšanai, mēs izmantojam sekojošo:
veiktspējas pārbaudeC++
fstream fileout('file.txt' ios::out);
Šos režīmus var arī kombinēt, izmantojot operatoru VAI (|). Piemēram, varat atvērt failu straumi gan lasīšanas, gan rakstīšanas režīmā, kā parādīts attēlā:
C++fstream str('file.txt' ios::in | ios::out);
Ja rakstīšanas režīmā atvērtais fails neeksistē, tiek izveidots jauns fails. Bet, ja lasīšanas režīmā atvērtais fails neeksistē, jauns fails netiek izveidots un tiek izmests izņēmums
Citas failu straumes
fstream nav vienīgā failu straume, ko nodrošina C++. Ir vēl divas specializētas straumes:
- ifstream : apzīmē ievades faila straumi. Tas ir līdzvērtīgs fstream in atvēršanai ios::in režīmā.
- ārpus plūsmas : apzīmē izvades faila straumi. Tas ir līdzvērtīgs fstream in atvēršanai ios::out režīmā.
Iepriekš minētie režīmi ir noklusējuma režīmi šīm straumēm. Šos režīmus nevar mainīt, bet tos var apvienot ar citiem režīmiem. Tagad ievadei mēs varam izmantot arī ifstream, kā parādīts:
C++ifstream filein('file.txt');
Līdzīgi izvadei:
C++ofstream fileout('file.txt');
Ierakstiet datus failā
Kad fails ir atvērts rakstīšanas režīmā, izmantojot kādu no fstream vai ārpus plūsmas mēs varam veikt rakstīšanas darbību līdzīgi kā ar cout izmantojot << operator.
C++#include using namespace std; int main() { // Open a file ofstream file('GFG.txt'); // Write the string to the file file << 'Welcome to GeeksforGeeks.'; return 0; }
GFG.tekstsLasīt datus no faila
Kad fails ir atvērts lasīšanas režīmā, izmantojot fstream vai ifstream, mēs varam veikt rakstīšanas darbību līdzīgi kā ar cin, izmantojot >> operators.
C++#include using namespace std; int main() { // Open a file in read mode ifstream file('GFG.txt'); string s; // Read string from the file file >> s; cout << 'Read String: ' << s; return 0; }
Izvade
Read String: WelcomeTam ir tāda pati problēma kā cin. Ievade tiek ievadīta tikai līdz pirmajai atstarpes rakstzīmei. Lai no tā izvairītos, mēs varam izmantot getline() funkcija, kā parādīts:
C++#include using namespace std; int main() { // Open a file in read mode ifstream file('GFG.txt'); string s; // Read string from the file getline(file s); cout << 'Read String: ' << s; return 0; }
Izvade
Read String: Welcome to GeeksforGeeks.Faila aizvēršana
Faila aizvēršana nozīmē saistītās straumes aizvēršanu un izmantoto resursu atbrīvošanu. Ir svarīgi aizvērt failu pēc tam, kad esat to pabeidzis, jo īpaši ilgstošās programmās, lai izvairītos no atmiņas noplūdes datu zuduma utt.
Programmā C++ faili tiek aizvērti, izmantojot aizvērt () dalībnieka funkcija, kas ir pieejama visās failu plūsmās.
C++#include using namespace std; int main() { // Open a file in read mode ifstream file('GFG.txt'); string s; // Read string from the file getline(file s); cout << 'Read String: ' << s; // Close the file file.close(); return 0; }
Izvade
Read String: Welcome to GeeksforGeeks.Kļūdas failu apstrādē
Failu apstrādē var rasties daudz dažādu kļūdu veidu, piemēram, fails nav atrasts, ja disks ir pilns utt. Mūsu programmām ir jārēķinās ar bieži sastopamām kļūdām un jāspēj tās pareizi apstrādāt. Tālāk ir norādītas dažas izplatītas kļūdas, kas var rasties failu apstrādes laikā.
Faila atvēršanas kļūme
Var būt gadījumi, kad fails netiek atvērts dažādu iemeslu dēļ, piemēram, tā neeksistē vai programmai nav atļaujas to atvērt utt. Šajā gadījumā mēs varam izmantot ir_atvērts() failu straumes klašu dalībnieka funkcija, lai pārbaudītu, vai fails ir veiksmīgi atvērts vai nē.
C++#include using namespace std; int main() { fstream file('nonexistent_file.txt' ios::in); // Check if the file is opened if (!file.is_open()) { cerr << 'Error: Unable to open file!' << endl; return 1; } file.close(); return 0; }
Izvade
Error: Unable to open file!Datu lasīšanas/rakstīšanas neveiksme
Vēl viena izplatīta kļūda ir datu nolasīšanas vai rakstīšanas nespēja tādu iemeslu dēļ kā nepareizs režīms utt. Šajā gadījumā mēs varam apstiprināt darbības pēc katra lasīšanas/rakstīšanas mēģinājuma. Piemēram, lasīšanu, izmantojot getline(), var apstiprināt šādi:
C++#include using namespace std; int main() { fstream file('GFG.txt' ios::out); if (!file.is_open()) { cerr << 'Error: Unable to open file!' << endl; return 1; } string line; // Checking if getline() read successfully or not if (!getline(file line)) cerr << 'Error: Failed to read data' << endl; file.close(); return 0; }
Izvade
Error: Failed to read dataFaila beigu (EOF) kļūda
Mēģinot lasīt tālāk par faila beigām, var rasties EOF kļūda. Tas var notikt, ja pirms lasīšanas nepārbaudāt faila beigas. Mēs varam pārbaudīt EOF, izmantojot eof() dalībnieka funkcija.
C++#include using namespace std; int main() { ifstream file('GFG.txt'); if (!file.is_open()) { cerr << 'Error: Unable to open file!' << endl; return 1; } string line; while (getline(file line)) cout << line << endl; // Check for eof if (file.eof()) cout << 'Reached end of file.' << endl; else cerr << 'Error: File reading failed!' << endl; file.close(); return 0; }
Izvade
Reached end of file.Ņemiet vērā, ka pirms EOF as pārbaudes esam apstiprinājuši arī lasīšanas darbību getline() tikai atgriezīsies nullptr pat ja lasīšana kāda iemesla dēļ neizdodas.
Bināro failu apstrāde
C++ mēs varam arī rīkoties binārie faili kas glabā datus neapstrādātā formātā. Bināro datu lasīšanai un rakstīšanai jāizmanto ios::binārais karodziņš, veidojot/atverot bināro failu.
kas ir obj java
Ierakstiet binārajā failā
Lai rakstītu datus binārā failā, mums vispirms ir jāatver vai jāizveido fails ios::binārais režīmā.
C++#include #include #include using namespace std; int main() { string str = 'Welcome to GeeksForGeeks'; // Open a binary file for writing ofstream file('fileBin.bin' ios::binary); // Check if the file is open if (!file) { cerr << 'Error opening the file for writing.'; return 1; } // Write the length of the string (size) to file first size_t strLength = str.length(); file.write(reinterpret_cast<const char *>(&strLength) sizeof(strLength)); // Write the string to the binary file file.write(str.c_str() strLength); // Close the file file.close(); return 0; }
Izvade
Binārais failsLasīšana no binārā faila
Tāpat kā mēs atveram failu binārajā režīmā, lai rakstītu datus, lai nolasītu datus no binārā faila, mums ir jāatver fails lasīšanas režīmā, izmantojot ios::in .
Sintakse:
C++fstream fileInstance('fileName.bin' ios::in| ios::binary);
C++ #include #include #include using namespace std; int main() { string str; // Open the binary file for reading fstream file('fileBin.bin' ios::in | ios::binary); // Check if the file is open if (!file) { cerr << 'Error opening the file for reading.'; return 1; } // Read the length of the string (size) from the file size_t strLength; file.read(reinterpret_cast<char *>(&strLength) sizeof(strLength)); // Allocate memory for the string and read the data char *buffer = new char[strLength + 1]; // +1 for the null-terminator file.read(buffer strLength); // Null-terminate the string buffer[strLength] = ' '; // Convert the buffer to a string str = buffer; // Print file data cout << 'File Data: ' << str; delete[] buffer; file.close(); return 0; }
Izvade
File Data: Welcome to GeeksForGeeksCitas darbības ar failiem
Mēs varam arī veikt vairāk darbību, lai manipulētu ar failu no mūsu C++ programmas. dažas no izplatītākajām failu operācijām ir:
Izveidojiet viktorīnu
- C++ programma faila dzēšanai
- Pievienojiet virkni esošajā failā
- Kopējiet vienu failu citā failā