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;
}