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 få 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.
****************************************************************