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

Hur man tar bort eller minimerar webbdelar i SharePoint 2013 - dummies

Hur man tar bort eller minimerar webbdelar i SharePoint 2013 - dummies

Du har två alternativ för att ta bort en webbdel från din SharePoint-sida - stängning eller radering. Att stänga en webbdel lämnar webbdelen på sidan så att du kan aktivera den igen för framtida användning. Att ta bort webbdelen tar bort webbdelen från din sida (men tar inte bort den från SharePoint). Till ...

För att ladda ner Apps från SharePoint Store - dummies

För att ladda ner Apps från SharePoint Store - dummies

Förutom de appar som följer med SharePoint, Du kan också lägga till appar från tredje part. Dessa tredjepartsprogram visas i SharePoint-butiken. Om du använder SharePoint Online har du tillgång till hela butiken. Om du använder SharePoint On-Premise kan dina lokala IT-administratörer ha låst ned de appar som ...

Hur man visar visningar via webbdelar i SharePoint 2013 - dummies

Hur man visar visningar via webbdelar i SharePoint 2013 - dummies

Du vill visa din SharePoint appdata med annan text och webbdelar på flera platser, till exempel hemsidor för hemsida, webbsidor eller publiceringssidor. I dessa situationer vill du inte att dina användare ska interagera med själva appen med alla redigeringsalternativ. Du vill bara att de ska se flera ...

Redaktörens val

Vad är Kik? - dummies

Vad är Kik? - dummies

Grundades 2009, är Kik en gratis snabbmeddelandeprogram utvecklad från Kik Interactive. Kik är tillgängligt på Android, Windows Phone och iOS-enheter. Applikationen är modellerad efter BlackBerry Messenger. Kik använder den befintliga smarttelefonens dataplan eller Wi-Fi för att skicka och ta emot meddelanden, videoklipp, foton, mobila webbsidor, skisser och annat innehåll. ...

ÖVersätt Twitter Slang och Jargon - dummies

ÖVersätt Twitter Slang och Jargon - dummies

Diskussioner om och om Twitter är fulla med alla slags förkortningar och jargong som kan förvirra nya Twitter-användare. Vad talar folk om (och tweeting) om? Följande ordlista definierar några av de förvirrande förkortningarna och Twitter-lingo du kan komma över. AFAIK: Så vitt jag vet. bot: Ett konto som drivs av en ...

Vad är Letgo? - dummies

Vad är Letgo? - dummies

Letgo är en mobil klassificerad applikation som tillåter användare att köpa från och sälja till andra lokalt. Du kan använda Letgo till fyndbutik eller slutligen släppa på saker som samlar damm runt ditt hus. I likhet med andra classifieds-applikationer som Wallapop eller Craigslist kommer säljare att skicka ett objekt och vänta på en köpare ...

Redaktörens val

Vanliga kodningsfel - dummies

Vanliga kodningsfel - dummies

Koden fungerar inte? Här är några vanliga misstag som kan gå upp till och med även den mest erfarna kodaren. Om din kod inte kommer att köras, försök att springa ned den här checklistan för att se om du har några av dessa fel: Har inte en slutlig HTML-tagg efter varje öppnande HTML-tagg . Saknade parentes i ...

Grundläggande kodningsordförråd - dummies

Grundläggande kodningsordförråd - dummies

Kodning har ett omfattande vokabulär som för lekmän kan verka som ogenomtränglig technobabble. Oavsett om du läser kodningsrelaterad artikel online eller pratar med en utvecklare på jobbet hörs det kanske ord som du inte har hört förut eller som har en annan mening i en kodande kontext. Här är några vanliga ordförrådsord att veta: Allmänt ...