Die Datensätze (struct) werden in eine Datei geschrieben und daraus ein beliebiger Datensatz zurückgelesen.
- Im Beispielprogramm werden zwei Buttons verwendet, hinter denen sich das Schreiben bzw. Lesen verbirgt
- Edit1 beinhaltet die Nummer des zu lesenden Datensatzes
- Die gelesenen TestDaten werden in einem Memofeld ausgegeben
- Daten, die in dem Struct ‚Daten‘ vom Typ data stehen, werden in eine Datei ‚datafile.dat‘ im aktuellen Verzeichnis geschrieben
- soll die Datei später in einem anderen Zusammenhang geöffnet werden, so muss im TFileStream-Konstruktor statt fmCreate fmOpenRead, fmOpenWrite oder fmOpenReadWrite verwendet werden!!
- Unit1.h
#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- struct data { char Name[15]; // 15 Zeichen langer Name -> kein (!!!) AnsiString verwenden!!! bool bWert; DWORD dwWert; float fWert; int iWert; }; class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; TMemo *Memo1; TButton *Button2; TEdit *Edit1; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // Anwender-Deklarationen public: // Anwender-Deklarationen data *Daten; //Zeiger auf eine Datenstruktur __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
- Unit1.cpp
#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { float Temp; // temporäre Zwischenvariable für float-Wert int i; AnsiString Name; Daten = new data; // Neues Datenstruktur-Objekt TFileStream *Datei = new TFileStream(".datafile.dat", fmCreate); // 100 Testwerte schreiben for (i=1;i<=100;i++) { Name = "Testname" + IntToStr(i); // Namen zusammenbauen strcpy(Daten->Name, Name.c_str()); // und nach Daten->Name übergeben Daten->bWert = i%2 ? true : false; // bool-Wert übergeben Daten->dwWert = i; Temp = i; Daten->fWert = Temp/2; // float-Wert übergeben Daten->iWert = i; // int-Wert übergeben Datei->Write(Daten, sizeof(data)); // struct "Daten" in die Datei schreiben } delete Daten; delete Datei; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Daten = new data; TFileStream *Datei = new TFileStream(".datafile.dat", fmOpenRead); // Datensatzzeiger auf den entsprechenden Datensatz setzen // in Edit1 steht die Nummer des zu lesenden Datensatzes Datei->Seek(Edit1->Text.ToIntDef(1) * sizeof(data), soFromBeginning); // Daten aus der Datei in das struct "Daten" einlesen Datei->Read(Daten, sizeof(data)); // Testdaten ausgeben Memo1->Lines->Clear(); Memo1->Lines->Add(Daten->Name); if (Daten->bWert) Memo1->Lines->Add("true"); else Memo1->Lines->Add("false"); Memo1->Lines->Add(IntToStr(Daten->dwWert)); Memo1->Lines->Add(FloatToStr(Daten->fWert)); Memo1->Lines->Add(IntToStr(Daten->iWert)); delete Daten; delete Datei; }