Hem Personliga finanser Hantering av fel i C ++ när du öppnar en fil - dummies

Hantering av fel i C ++ när du öppnar en fil - dummies

Video: Writing 2D Games in C using SDL by Thomas Lively 2024

Video: Writing 2D Games in C using SDL by Thomas Lively 2024
Anonim

När du öppnar en fil kan alla saker gå fel. En fil lever på en fysisk enhet - en fast disk, till exempel, eller kanske på en flash-enhet eller SD-kort - och du kan stöta på problem när du arbetar med fysiska enheter.

Till exempel kan en del av skivan vara skadad, vilket leder till att en befintlig fil blir skadad. Eller, mindre katastrofalt, du kanske slut på diskutrymme. Eller, än mindre katastrofalt, kan du försöka öppna en fil i en katalog som inte existerar.

Om du försöker öppna en fil för att skriva genom att ange en fullständig sökväg och ett filnamn men katalogen existerar inte, svarar datorn olika, beroende på vilket operativsystem du använder. Om du är osäker på hur ditt operativsystem ska reagera, försök skriva en enkel testapplikation som försöker skapa och öppna något som / abc / def / ghi / jkl / abc. Text. (Självklart vill du vara säker på att använda en katalog som inte existerar.)

Då kommer en av två saker att hända: Antingen kommer katalogen och filen att skapas, eller inget kommer att hända.

Om vi ​​till exempel försöker skapa en fil i en katalog som inte existerar, skapar systemet inte katalogen i ett Windows-system. Det beror på att djupt inuti, applikationen kallar i slutändan en operativsystemfunktion som gör det smutsiga arbetet med att skapa filen. Och den här operativsystemfunktionen (den heter CreateFile (), om du ens bryr dig) har en regel att det inte kommer att skapa en katalog för dig.

Om du vill bestämma om ostream-klassen inte kunde skapa en fil, kan du ringa sin miss () medlemsfunktion. Den här funktionen returnerar sant om objektet inte kunde skapa filen. Och det är vad som händer när en katalog inte existerar. Det visade DirectoryCheck01-exemplet visar ett exempel på detta.

#include # include using namespace std; int main () {ofstream outfile ("/ abc / def / ghi / MyFile. txt"); om (outfile. fail ()) {cout << "kunde inte öppna filen!" << endl; returnera 0;} outfile << "hej" << endl; utfil. stänga(); returnera 0;}

När du kör den här koden, förutsatt att du inte har en katalog kallad / abc / def / ghi på ditt system, ska du se meddelandet Kunde inte öppna filen! Förutsatt att ditt specifika operativsystem inte skapar en katalog i det här fallet. Om det gör kommer datorn att öppna filen, skriva Hej till det och fortsätta med sitt lyckliga liv efter att ha stängt sakerna.

Som ett alternativ till att ringa funktionen fail () kan du använda en operatör som är tillgänglig i olika strömklasser. Detta är!, förtjust kallad "bang" -operatören, och du skulle använda den istället för att ringa misslyckas (), som i den här koden:

om (!outfile) {cout << "kunde inte öppna filen!" << endl; returnera 0;}

De flesta föredrar att använda! outfile istället för outfile. misslyckas (), även om! outfile gör förvirrande kod. Anledningen är att outfile är ett objekt, och begreppet! Outfile är helt enkelt inte meningsfullt.

Faktum är att! outfile resor upp många början programmerare. De vet att outfile inte är en pekare i denna provkod, och de undrar hur man kan testa det mot 0 som man normalt bara kan göra med en pekare. (Kom ihåg, genom att säga! X, där x är en pekare, testar du x mot 0.) Och det är helt enkelt ingen mening! Och för att undvika förvirring, ring bara misslyckas (). Det är mer meningsfullt.

Här är några anledningar till att din filtillverkning kan störa:

  • Katalogen existerar inte.

  • Du har lite diskutrymme och ingen lycka till.

  • Din ansökan har inte rätt behörighet att skapa en fil.

  • Filnamnet var ogiltigt - det vill säga det innehöll tecken som operativsystemet inte tillåter i ett filnamn, till exempel * eller?.

Som en bra ansökan bör din ansökan göra två saker:

  1. 1. Kontrollera om en filtillverkning lyckades.

  2. 2. Om filen skapades misslyckades, hantera den på lämpligt sätt.

    Skriv inte bara ett hemskt meddelande som Oj! Avbryter!, lämnar dina stackars användare inget annat än att kasta skärmen på golvet. I stället gör något vänligare - till exempel att presentera ett meddelande som säger att det finns ett problem och föreslår att de kan frigöra mer diskutrymme.

Hantering av fel i C ++ när du öppnar en fil - dummies

Redaktörens val

Hitta hur du betalar webbplatser i online dating - dummies

Hitta hur du betalar webbplatser i online dating - dummies

Du får vad du betalar för I livet ingår Internet-dating webbplatser. Till skillnad från gratis webbplatser, med lönesidor har du inte huvudvärk på oändliga reklammeddelanden som skriker i ditt ansikte. Dessutom är omfattningen av täckning och tillgängliga funktioner bred och robust. Solid tillsyn tillhandahålls (för att gräva ut wackos) och lämpliga hinder ...

Dating för Dummies Cheat Sheet - dummies

Dating för Dummies Cheat Sheet - dummies

Dating behöver inte vara nervös, men det kräver förberedelse . Du måste göra en uppriktig själsökning så att du är redo att vara ärlig, öppen och uppmärksam. Du behöver en stark känsla för dina dejtingförväntningar så att du tydligt kan kommunicera vad du letar efter utan att ställa in baren så hög att ingen ...

Få passar för dating igen efter 50 - dummies

Få passar för dating igen efter 50 - dummies

Copyright © 2014 AARP All rights reserved. Du behöver inte vara frisk och frisk efter 50, men det hjälper säkert om du är. Om du inte är något av dessa saker, behöver du inte ge upp och tycker att det är för sent att komma dit. Många börjar träningsregler så sent som ålder ...

Redaktörens val

ÄR ett au pair rätt för din familj? - dummies

ÄR ett au pair rätt för din familj? - dummies

Det är viktigt att undersöka dina specifika familjeförhållanden för att avgöra om ett au pair är rätt barnomsorg för din familj. Du kanske bestämmer dig för att anställa ett au pair i stället för daghem, barnbarn eller barnpassare om du vill utsätta din familj för en ny kultur. Är ...

Online-verktyg för familjebudgetar - dummies

Online-verktyg för familjebudgetar - dummies

Vissa familjer kan tycka att den mest användbara aspekten av att bo i en värld med nästan oändliga onlineverktyg innebär att kunna budgetera för familjen med dessa verktyg. Följande tre onlinetjänster erbjuder familjer ett sätt att organisera familjeutgifter online, dela åtkomst till säkra konton och eliminera några av papperet ...

Barn som Online Entreprenörer - Dummies

Barn som Online Entreprenörer - Dummies

Levande i en digital värld tillåter barnen obegränsade möjligheter när det gäller entreprenörskap. Denna digitala tidsålder ger barnen en unik färdighetssats med möjlighet att dela den färdigheten med andra och lägga till "onlineföretagare" till listan över möjliga efterskolor och sommarjobb som finns tillgängliga för barn idag. Spelskapande Ett område där digitalt ...

Redaktörens val

Word 2007 Mail Merge - Steg 3: Byggnadsrekord - dummies

Word 2007 Mail Merge - Steg 3: Byggnadsrekord - dummies

Efter att ha definierat de fält du behöver för din Word 2007-postfusion, är nästa steg att slutföra adresslistan. För att göra det skapar du en lista över poster genom att ange data för varje fält i varje post. Detta händer i dialogrutan Ny adresslista. Kom ihåg att fält är kolumner och ...

Word 2007 Mail Merge - Steg 5: Final Merge - dummies

Word 2007 Mail Merge - Steg 5: Final Merge - dummies

Med sammanfogningsfälten infogad i huvudversionen av Word 2007-dokumentet och adresslistan stannar, är du redo att starta din mailfusion! Spara huvuddokumentet. Klicka på knappen Förhandsgranska resultat. Fälten i huvuddokumentet försvinner! De ersätts av information från den första posten i adresslistan. Så här ...