Video: Warlock | Henry Fonda | WESTERN MOVIE | Full Length Cowboy Film | English 2025
Når du åpner en fil, kan alle slags ting gå galt. En fil lever på en fysisk enhet - en fast disk, for eksempel, eller kanskje på en flash-enhet eller SD-kort - og det kan føre til problemer når du arbeider med fysiske enheter.
For eksempel kan en del av disken bli skadet, noe som fører til at en eksisterende fil blir skadet. Eller, mindre katastrofalt, kan du gå tom for diskplass. Eller, enda mindre katastrofalt, kan du prøve å åpne en fil i en katalog som ikke eksisterer.
Hvis du prøver å åpne en fil for å skrive ved å angi en full sti og filnavn, men katalogen ikke finnes, reagerer datamaskinen annerledes, avhengig av hvilket operativsystem du bruker. Hvis du er usikker på hvordan ditt operativsystem vil svare, kan du prøve å skrive et enkelt testprogram som prøver å opprette og åpne noe som / abc / def / ghi / jkl / abc. tekst. (Selvfølgelig vil du være sikker på å bruke en katalog som ikke eksisterer.)
Deretter vil en av to ting skje: Hverken katalogen og filen vil bli opprettet, eller ingenting vil skje.
Hvis vi for eksempel forsøker å lage en fil i en katalog som ikke eksisterer, oppretter systemet ikke katalogen i et Windows-system. Det er fordi dypt ned inne, kaller programmet til slutt en operativsystemfunksjon som gjør det skitne arbeidet med å skape filen. Og denne operativsystemfunksjonen (det kalles CreateFile (), hvis du engang bryr deg) har en regel om at den ikke vil opprette en katalog for deg.
Hvis du vil avgjøre om ostream-klassen ikke var i stand til å opprette en fil, kan du ringe sin fail () -funksjon. Denne funksjonen returnerer sant hvis objektet ikke kunne opprette filen. Og det er hva som skjer når en katalog ikke eksisterer. Det viste DirectoryCheck01-eksemplet viser et eksempel på dette.
#include # include using namespace std; int main () {ofstream outfile ("/ abc / def / ghi / MyFile. txt"); hvis (outfile. fail ()) {cout << "kunne ikke åpne filen!" << endl; return 0;} outfile << "hei" << endl; outfile. Lukk(); returner 0;}
Når du kjører denne koden, antar du at du ikke har en katalog kalt / abc / def / ghi på systemet, bør du se meldingen Kunne ikke åpne filen! Forutsatt at ditt operativsystem ikke oppretter en katalog i dette tilfellet; Hvis det gjør det, vil datamaskinen åpne filen, skrive Hei til det, og fortsette med sitt lykkelige liv etter å ha lukket ting ut.
Som et alternativ til å ringe funksjonen fail (), kan du bruke en operatør tilgjengelig i ulike strømklasser. Dette er!, kyndig referert til som "bang" -operatøren, og du vil bruke den i stedet for å ringe mislykkes (), som i denne koden:
hvis (!outfile) {cout << "kunne ikke åpne filen!" << endl; returner 0;}
De fleste foretrekker å bruke! outfile i stedet for outfile. mislykkes (), selv om! Outfile gjør forvirrende kode. Årsaken er at outfile er et objekt, og ideen om! Outfile betyr ikke noe fornuftig.
Faktisk! Outfile reiser opp mange begynnende programmerere. De vet at utskrift ikke er en peker i denne prøvekoden, og de lurer på hvordan du kan teste den mot 0 som du vanligvis bare kan gjøre med en peker. (Husk, ved å si! X, hvor x er noen peker, du tester x mot 0.) Og det er bare ikke fornuftig! Og så, for å unngå forvirring, bare ring feil (). Det gir mer mening.
Her er noen grunner til at filopprettelsen kan stryke:
-
Telefonboken finnes ikke.
-
Du er ute av diskplass og uten lykke.
-
Din søknad har ikke rettigheter for å opprette en fil.
-
Filnavnet var ugyldig - det inneholdt tegn som operativsystemet ikke tillater i et filnavn, for eksempel * eller?.
Som enhver god applikasjon, bør søknaden din gjøre to ting:
-
1. Kontroller om en filopprettelse lyktes.
-
2. Hvis filopprettelsen mislyktes, må du håndtere den på riktig måte.
Ikke skriv ut en forferdelig melding som Ups! Avbryter!, slik at de dårlige brukerne ikke har noe annet valg enn å kaste skjermen på gulvet. I stedet gjør noe vennligere - for eksempel å presentere en melding som forteller dem at det er et problem og foreslår at de kan frigjøre mer diskplass.
