Video: Discursul medicului Ben Carson l-a eclipsat pe cel al lui Obama, 2024
Când deschideți un fișier construindu-se fie o instanță instream sau ifstream, puteți modifica modul în care fișierul se va deschide furnizând ceea ce se numește flag. În termeni de calculator, un steag este pur și simplu un element mic a cărui prezență sau lipsă de prezență indică o funcție de a face ceva. Cu clasele instream și ifstream, funcția în cauză este constructorul.
Un steguleț arată ca ios:: app dacă utilizați un compilator care nu este complet compatibil cu ANSI sau arată ca ios_base:: app dacă utilizați unul care este complet compatibil cu ANSI. Acest steag special înseamnă că doriți să scrieți un fișier, dar doriți să adăugați la orice date existente care ar putea fi deja într-un fișier. Furnizați acest steguleț ca argument al constructorului pentru astream, ca în oricare dintre următoarele exemple:
outstream outstream ("AppendableFile. Txt", ios:: app); outstream ("AppendableFile. txt", ios_base:: app);
Puteți vedea că steagul este adăugat ca un al doilea parametru constructorului. Pe lângă aplicație există și alte drapele și le puteți combina utilizând operatorul sau,. De exemplu, un drapel este ios:: nocreate (care nu este inclus în compilatoarele mai noi).
Aceasta înseamnă că "deschideți fișierul numai dacă există deja. "Asta este, nu creați fișierul dacă acesta nu există. (Amintiți-vă că fluxul de date creează un fișier dacă acesta nu există deja.) Dacă fișierul nu există, deschiderea va eșua și când veți apela eșuează, veți primi un adevărat.
Steagul ios:: nocreate este la îndemână cu ios:: app. Împreună, acestea înseamnă să deschidă un fișier existent și să îl atașeze . Aceasta înseamnă că cele două împreună vor funcționa numai dacă fișierul există deja, iar apelul va deschide fișierul pentru o operație de adăugare. Dacă fișierul nu există deja, fișierul nu va fi creat. Iată un eșantion:
outstream outstream ("… / MyFile. Txt", ios:: app | ios:: nocreate); dacă (outfile. fail ()) {cout << "nu a putut deschide fișierul!" << endl; retur 0;} outfile << "hi" << endl; outfile. închide();
Dacă MyFile. txt nu există când executați acest cod, primiți mesajul Nu a putut fi deschis fișierul! Dar dacă MyFile. txt nu există, aplicația o deschide, adaugă șirul Hi la ea și în cele din urmă o închide.
Se pare că steagul nocreate nu este disponibil în noua Bibliotecă Standard. Păcat. Prin urmare, codul funcționează numai dacă utilizați o versiune anterioară a bibliotecii. Când utilizați codul:: Compilarea blocurilor, veți vedea următorul mesaj de eroare:
eroare: "nocreate" nu este membru al "; std:: ios '
Cu toate acestea, veți dori să testați dacă compilatorul dvs. special include o bibliotecă care acceptă ios:: nocreate.Compilatorul dvs. o poate sprijini oricum, chiar dacă include noua Bibliotecă Standard. Ca alternativă la ios:: nocreate, puteți folosi următorul cod (găsit în exemplul FileOutput02):
ifstream infile ("… / MyFile. Txt"); dacă (infilează eșuează ()) {cout << "nu a putut deschide fișierul!" << endl; retur 0;} infile. închide(); outstream outstream ("… / MyFile.txt", ios:: app); outfile << «hi» << endl; outfile. închide();
În acest caz, începeți prin a încerca să deschideți fișierul pentru citire. Dacă fișierul nu există, nu puteți citi din acesta și codul se termină cu un mesaj de eroare. Dacă codul poate citi din fișier, redeschide fișierul pentru scriere. Aceasta este o soluție greoaie, dar funcționează.
În continuare este prezentată o listă a steagurilor disponibile. Mai întâi, aici sunt cele pentru iOS, în cazul în care utilizați un compilator care nu este complet compatibil cu ANSI:
-
ios:: app: Acest steag înseamnă că doriți să deschideți un fișier și să îl atașați.
-
ios:: in: Includeți acest steag dacă doriți să citiți dintr-un fișier.
-
ios:: out : Includeți acest steag dacă doriți să scrieți un fișier.
-
ios:: trunc : Includeți acest steag dacă doriți să ștergeți conținutul fișierului înainte de a-l scrie. Este opusul anexei și este de asemenea implicit dacă nu includeți în mod specific ios:: app.
-
ios:: nocreate : Utilizați acest steag dacă doriți să vă asigurați că fișierul nu va fi creat dacă acesta nu există, rezultând că fișierul nu este deschis.
-
ios:: noreplace : Acest steag este opusul nocreate. Utilizați acest steag dacă doriți doar să creați un fișier nou. Dacă utilizați acest steag și fișierul există deja, fișierul nu se va deschide și acel eșec va reveni la adevărat.
Compilatoarele compatibile cu ANSI nu acceptă nici pavilionul ios:: noreplace. În acest caz, puteți folosi opusul fixului pentru pictograma ios: nocreate, așa cum se arată aici (și găsit în exemplul FileOutput03):
ifstream infile ("… / MyFile.txt"); dacă (! infile. fail ()) {cout << "fișierul există deja!" << endl; retur 0;} infile. închide(); outstream outstream ("… / MyFile.txt"); outfile << «hi» << endl; outfile. închide();
În acest caz, codul încearcă să deschidă fișierul pentru citire. Dacă fișierul există, codul afișează un mesaj de eroare și iese. În caz contrar, codul creează un fișier nou și îl scrie.
Următoarele steaguri sunt disponibile într-un compilator care este absolut compatibil cu ANSI!
-
ios:: ate: Utilizați acest steag pentru a merge la sfârșitul fișierului după ce îl deschideți. În mod normal, utilizați acest steag atunci când doriți să adăugați date în fișier.
-
ios_base:: binary: Utilizați acest steag pentru a specifica că fișierul pe care îl deschideți va conține date binare - adică date care nu reprezintă șiruri de caractere.
-
ios_base:: in: Specificați acest steag atunci când doriți să citiți dintr-un fișier.
-
ios_base:: out: Includeți acest steag atunci când doriți să scrieți un fișier.
-
ios_base:: trunc: Includeți acest steag dacă doriți să ștergeți conținutul unui fișier înainte de a scrie la el.
-
ios_base:: app: Includeți acest steag dacă doriți să adăugați la fișier. Este opusul truncului - adica informatia care se afla deja in fisier cand o deschideti va ramane acolo.
De ce aveți nevoie de un steag și un steag? Se pare că calculatorul ar trebui să știe dacă scrieți la un fișier sau citiți de la el, în funcție de (respectiv) dacă utilizați în flux sau în flux. Răspunsul la motivul pentru care aveți un steag și un steag este că alte clase sunt disponibile pe lângă streamstream și ifstream.
Compilatorii care nu suportă încă standardul ANSI au o clasă generică în bibliotecile lor numite fstream. Compilatoarele compatibile cu ANSI au în bibliotecile lor o clasă de șabloane numită basic_filebuf și o clasă numită filebuf. Dacă utilizați aceste clase, puteți utiliza stegulețele de intrare și ieșire.