Video: What does FLAG mean? English word definition 2025
Når du åpner en fil ved å bygge enten en oppstrøms eller omstrøms forekomst, kan du endre måten filen åpner ved å levere det som kalles flagg. I datamaskinbetingelser er et flagg ganske enkelt et lite element hvis tilstedeværelse eller mangel på nærvær forteller en funksjon hvordan man gjør noe. Med oppstrøms- og omstrømsklassene er den aktuelle funksjonen konstruktøren.
Et flagg ser ut som ios:: app hvis du bruker en kompilator som ikke er fullstendig ANSI-kompatibel, eller ser ut som ios_base:: app hvis du bruker en som er fullstendig ANSI-kompatibel. Dette bestemte flagget betyr at du vil skrive til en fil, men du vil legge til eksisterende data som allerede finnes i en fil. Du leverer dette flagget som et argument fra konstruktøren for avstrøm, som i ett av følgende eksempler:
ofstream outfile ("AppendableFile.txt", ios:: app); ofstream outfile ("AppendableFile. txt", ios_base:: app);
Du kan se at flagget er lagt til som en andre parameter til konstruktøren. Andre flagger finnes i tillegg til app, og du kan kombinere dem ved å bruke eller operatøren, |. For eksempel er et flagg iOS:: nocreate (som ikke er inkludert i nyere kompilatorer).
Denne betyr at "bare åpne filen hvis den allerede finnes. "Det vil si, ikke opprett filen hvis den ikke eksisterer. (Husk at stream genererer en fil hvis den ikke allerede eksisterer.) Hvis filen ikke eksisterer, vil den åpne mislykkes, og når du ringer mislykkes, vil du få tilbake en ekte .
Ios:: nocreate flagg er praktisk med ios:: app. Sammen betyr dette at åpner en eksisterende fil og legger til den . Det vil si at de to sammen vil fungere bare hvis filen allerede eksisterer, og samtalen åpner filen for en tilleggsoperasjon. Hvis filen ikke eksisterer, vil filen ikke bli opprettet. Her er en samtalekall:
ofstream outfile ("… / MyFile.txt", ios:: app | ios:: nocreate); hvis (outfile. fail ()) {cout << "kunne ikke åpne filen!" << endl; return 0;} outfile << "hei" << endl; outfile. Lukk();
Hvis MyFile. txt eksisterer ikke når du kjører denne koden, får du meldingen Kunne ikke åpne filen! Men hvis MyFile. txt eksisterer, applikasjonen åpner den, legger strenget hei til det, og til slutt lukker det.
Det viser seg at det nocreate flagget ikke er tilgjengelig i det nye standardbiblioteket. Nedtur. Koden fungerer derfor bare hvis du bruker en tidligere versjon av biblioteket. Når du bruker koden:: Blokker kompilator, ser du følgende feilmelding:
feil: 'nocreate' er ikke medlem av '; std:: ios '
Men du vil teste om din spesifikke kompilator inneholder et bibliotek som støtter IOS:: nocreate.Kompilatoren din kan likevel støtte det uansett, selv om den inneholder det nye standardbiblioteket. Som et alternativ til ios:: nocreate, kan du bruke følgende kode (funnet i FileOutput02 eksempelet):
ifstream infile ("… / MyFile. Txt"); hvis (infile. fail ()) {cout << "ikke kunne åpne filen!" << endl; return 0;} infile. Lukk(); ofstream outfile ("… / MyFile. txt", ios:: app); outfile << "hei" << endl; outfile. Lukk();
I dette tilfellet begynner du ved å prøve å åpne filen for å lese. Hvis filen ikke eksisterer, kan du ikke lese fra den og koden går ut med en feilmelding. Hvis koden kan lese fra filen, gjenåpnes filen for å skrive. Dette er en tungvint løsning, men det fungerer.
Følgende er en liste over tilgjengelige flagg. Først her er de for ios, hvis du bruker en kompilator som ikke er helt ANSI-kompatibel:
-
ios:: app: Dette flagget betyr at du vil åpne en fil og legge til den.
-
ios:: i: Inkluder dette flagget hvis du vil lese fra en fil.
-
ios:: ut : Inkluder dette flagget hvis du vil skrive til en fil.
-
ios:: trunc : Inkluder dette flagget hvis du vil slette innholdet i filen før du skriver til det. Det er motsatt av å legge til, og det er også standard hvis du ikke spesifikt inkluderer iOS:: app.
-
ios:: nocreate : Bruk dette flagget hvis du vil forsikre deg om at filen ikke vil bli opprettet hvis den ikke eksisterer, slik at filen ikke åpnes.
-
ios:: noreplace : Dette flagget er det motsatte av nocreate. Bruk dette flagget hvis du bare vil opprette en ny fil. Hvis du bruker dette flagget og filen allerede eksisterer, åpnes ikke filen, og feilen vil returnere sann .
ANSI-kompatible kompilatorer støtter ikke ikonet:: noreplace flagg heller. I dette tilfellet kan du bruke det motsatte av løsningen for ios: nocreate flagg, som vist her (og funnet i FileOutput03 eksempelet):
ifstream infile ("… / MyFile. Txt"); hvis (! infile. fail ()) {cout << "filen eksisterer allerede!" << endl; return 0;} infile. Lukk(); ofstream outfile ("… / MyFile. txt"); outfile << "hei" << endl; outfile. Lukk();
I dette tilfellet forsøker koden å åpne filen for å lese. Hvis filen eksisterer, viser koden en feilmelding og utganger. Ellers oppretter koden en ny fil og skriver til den.
Følgende flagg er tilgjengelig i en kompliant som er helt ANSI-kompatibel!
-
ios:: spiste: Bruk dette flagget til å gå til slutten av filen etter at du har åpnet den. Normalt bruker du dette flagget når du vil legge til data i filen.
-
ios_base:: binær: Bruk dette flagget til å angi at filen du åpner, vil inneholde binære data - det vil si data som ikke representerer tegnstrenger.
-
ios_base:: i: Angi dette flagget når du vil lese fra en fil.
-
ios_base:: out: Inkluder dette flagget når du vil skrive til en fil.
-
ios_base:: trunc: Inkluder dette flagget hvis du vil slette innholdet i en fil før du skriver til det.
-
ios_base:: app: Inkluder dette flagget hvis du vil legge til filen. Det er det motsatte av trunc - det vil si at informasjonen som allerede er i filen når du åpner den, forblir der.
Hvorfor trenger du et flagg og et flagg? Det ser ut til at datamaskinen skal vite om du skriver til en fil eller leser fra den, avhengig av (henholdsvis) om du bruker stream eller omstrøm. Svaret på hvorfor du har et flagg og et flagg er at andre klasser er tilgjengelige i tillegg til stream og ifstre.
Kompilatørene som ennå ikke fullt ut støtter ANSI-standarden, har en generisk klasse i sine biblioteker kalt fstream. ANSI-kompatible kompilatorer har i deres biblioteker en mal klasse som heter basic_filebuf og en klasse som heter filebuf. Hvis du bruker disse klassene, kan du bruke inn- og ut-flaggene.
