Filhantering

 

 

De flesta program arbetar som bekant med filer. C++ hanterar kommunikationen mellan hårddisk-skärm-tangentbord med s.k. strömmar.

För att kunna arbeta med inmatning och utmatning till filer behöver du:

1) Ansluta programmet till en fil.

2) Ett sätt att läsa innehållet till denna fil.

3) Ett sätt att programmet att skriva till en fil.

 

Detta går till ungefär på samma sätt som standard in- och utmatning.

Du skapar ett strömobjekt och använder metoderna i iostream.

För utmatning använder du t.ex. metoderna <<  eller write( ).

För inmatning >> eller get( ).

Om du skall skriva till en fil, vill du kanske lägga till i en befintlig fil eller ersätta hela fil innehållet.

Du kan också behöva flytta dig fram och tillbaka i filens innehåll.

För att hjälpa till med dessa uppgifter definierar c++ flera nya klasser i headerfilen fstream

inklusive en ifstream-klass för inmatning och en ofstream-klass för filutmatning.

 

Anta att du vill skriva till en fil då måste du göra följande

 

Börja med att inkludera headerfilen fstream (fstream.h).

 

Deklarera ett ofstreamobjekt                      ofstream fout;

(fout är bara ett namn på ofstreamobjektet du kan använda ett annat om du vill  t.ex vinkelhake.)

 

Associera objektet med en fil                     fout.open (”minFil”);

 

Satserna ovan kan göras i ett steg               ofstream fout(”minFil”);

 

Sedan kan du använda fout ungefär som du använder cout.

 

Fout<<”Don’t lose this number!”;

 

Raden ovan bör ge en fil i samma katalog som programmet, filen får namnet minFil

 

 

Klassen ofstream använder buffrad inmatning, vilket betyder att programmet allokerar minne för en utmatningsbuffert när det skapar ofstreamobjektet.

Objektet samlar så inmatningen ,en byte i taget, när bufferten är full överförs dess innehåll i ett stycke till destinationen.

 

Buffert fylls på

 

              Och töms när den blivit full.

 

 

 

Läsning av fil liknar skrivning till fil, du skapar ett ifstreamobjekt- associerar detta med en fil och använder sedan objektet som cin.

Du kan sedan använda fin på samma sätt som cout.

 

ifstream fin("minFil");

char ch;

fin.get(ch);              //läser in ett tecken, så länge något finns att läsa in.

cout<<ch<<"\n\n";

 

 

Övning: Gör ett program enligt ovan med ut- och inmatning I DevC++. kompilera och kör programmet.

Öppna sedan programmets katalog och se om du kan finna filen minFil. Filen skall gå att läsa i notepad.

 

Anslutningarna till filen stängs automatiskt när programmet avslutas, men du kan- och bör- stänga dem själva med metoden close ( ).

fout.close ( );

fin.close ( );  

Strömmen kan sedan återanslutas igen

 

 

 

***************************************************************

Uppfräschning av minnet:

Hur var det med metoderna get och getline i iostream???

cin.get läser in ett tecken eller en rad men inte radslutstecknet

Efter cin kan man behöva använda cin.ignore(1000,’\n’)

cin.getline läser in en hel rad inklusive radslutstecknet.

****************************************************************