Wenn fertig, bitte Fenster schließen
// Lösung zum Dateihandling mittels Streams // Dateien einbinden #include <iostream> #include <fstream> using namespace std; // Dateiname const char* const pszDATEI = "kunden.bin"; // main() Funktion int main() { // Definition der Kundendaten mit Initialisierung short nKdNummer = 33; float fUmsatz = 12.3f; short nTag=1, nMonat=3, nJahr=2008; // Eingabestream-Objekt definieren und mittels open() mit der Datei verbinden. fstream ioFile; ioFile.open(pszDATEI,ios::out|ios::in|ios::binary|ios::trunc); // Fehler abfangen! if (!ioFile) { cout << "Fehler beim Öffnen der Datei!\n"; exit(1); } // Daten in Datei übertragen ioFile.write(reinterpret_cast<char*>(&nKdNummer),sizeof(nKdNummer)); ioFile.write(reinterpret_cast<char*>(&fUmsatz),sizeof(fUmsatz)); ioFile.write(reinterpret_cast<char*>(&nTag),sizeof(nTag)); ioFile.write(reinterpret_cast<char*>(&nMonat),sizeof(nMonat)); ioFile.write(reinterpret_cast<char*>(&nJahr),sizeof(nJahr)); // Daten aus Datei auslesen ioFile.seekg(static_cast<ios::off_type>(0),ios::beg); ioFile.read(reinterpret_cast<char*>(&nKdNummer),sizeof(nKdNummer)); ioFile.read(reinterpret_cast<char*>(&fUmsatz),sizeof(fUmsatz)); ioFile.read(reinterpret_cast<char*>(&nTag),sizeof(nTag)); ioFile.read(reinterpret_cast<char*>(&nMonat),sizeof(nMonat)); ioFile.read(reinterpret_cast<char*>(&nJahr),sizeof(nJahr)); // Eingelesene Daten ausgeben cout << "Kundendaten:\n------------\n"; cout << "KD-Nummer : " << nKdNummer << endl; cout << "Umsatz in TSD : " << fUmsatz << endl; cout << "Letzter Umsatz am: "; cout << nTag << "." << nMonat << "." << nJahr << endl; // und jetzt Umsatz um 5 Tsd erhöhen fUmsatz += 5.0f; // und wieder in Datei zurückschreiben // Dateizeiger entsprechend positionieren // Der Umsatz liegt als 2. Datum in der Datei und damit // um nKdNummer hinter dem Dateianfang ioFile.seekp(static_cast<ios::off_type>(sizeof(nKdNummer)),ios::beg); ioFile.write(reinterpret_cast<char*>(&fUmsatz),sizeof(fUmsatz)); // Nun Datensatz erneut auslesen // ACHTUNG! Dateizeiger für Leseoperationen muss // natürlich auf Dateianfang positioniert werden ioFile.seekg(static_cast<ios::off_type>(0),ios::beg); // Daten aus Datei auslesen ioFile.read(reinterpret_cast<char*>(&nKdNummer),sizeof(nKdNummer)); ioFile.read(reinterpret_cast<char*>(&fUmsatz),sizeof(fUmsatz)); ioFile.read(reinterpret_cast<char*>(&nTag),sizeof(nTag)); ioFile.read(reinterpret_cast<char*>(&nMonat),sizeof(nMonat)); ioFile.read(reinterpret_cast<char*>(&nJahr),sizeof(nJahr)); // Datei schliessen ioFile.close(); // Eingelesene Daten formatiert auf Bildschirm ausgeben cout << "Kundendaten:\n------------\n"; cout << "KD-Nummer : " << nKdNummer << endl; cout << "Umsatz in TSD : " << fUmsatz << endl; cout << "Letzter Umsatz am: "; cout << nTag << "." << nMonat << "." << nJahr << endl; } |