![]() |
record in datei speichern und laden
Wie kann ich einen einzelnen oder mehrere Records in eine Datei oder einen Stream speichern und laden?
thx |
Re: record in datei speichern und laden
Typisierte Datei anlegen und mit write reinschreiben.
|
Re: record in datei speichern und laden
Moin Weazy,
enthalten die Records Strings? |
Re: record in datei speichern und laden
ja, si enthalten under anderem auch strings
|
Re: record in datei speichern und laden
Moin Weazy,
dann wirst Du Dir, wohl oder übel, eine eigene Routine für das Schreiben und Lesen der Records erstellen müssen, damit Du auch die Längen und Inhalte der Strings gespeichert bekommst. Wenn ich mich recht entsinne, hatte ich hierfür gerade gestern ein Beispiel mit TFileStream gepostet, ich weiss nur leider nicht mehr in welchem Thread das war. |
Re: record in datei speichern und laden
Ausschnitt aus
![]()
Delphi-Quellcode:
type
PConnection = ^TConnection; TConnection = packed record Description: string; Host: string; Port: Integer; User: string; Password: string; TimeOut: Integer; UseCompression : Boolean; UseTimeOut : Boolean; // later used... DB:string; Table:string; end; .... procedure TConnectionList.LoadConnections; var MyFile: TFileStream; i, len, len1: Integer; currentConnection: PConnection; begin if FileExists( ConnFile ) then begin MyFile := TFileStream.Create( ConnFile, fmOpenRead ); try MyFile.Read( len, SizeOf(len) ); //SetLength( ConnectionList, len ); for i:=0 to len-1 do begin New( currentConnection ); with currentConnection^ do begin // read description MyFile.Read( len1, SizeOf(len1) ); SetLength( Description, len1 ); MyFile.Read( PChar(Description)^, len1 ); // read host MyFile.Read( len1, SizeOf(len1) ); SetLength( Host, len1 ); MyFile.Read( PChar(Host)^, len1 ); // read user MyFile.Read( len1, SizeOf(len1) ); SetLength( User, len1 ); MyFile.Read( PChar(User)^, len1 ); // read password MyFile.Read( len1, SizeOf(len1) ); SetLength( Password, len1 ); MyFile.Read( PChar(Password)^, len1 ); // read port MyFile.Read( Port, SizeOf(Port) ); // read timeout MyFile.Read( TimeOut, SizeOf(TimeOut) ); // read UseCompression MyFile.Read( UseCompression, SizeOf( UseCompression ) ); // read UseTimeOut MyFile.Read( UseTimeOut, SizeOf( UseTimeOut ) ); end; Add( currentConnection ); end; finally MyFile.Free(); end; end else begin // no saved connections at this time... end; end; ... procedure TConnectionList.SaveConnections; var i, len, len1:integer; stream : TFileStream; begin stream := TFileStream.Create( ConnFile, fmCreate ); try // save the number of connections to remember... len := Count; stream.Write( len, SizeOf(len) ); for i:=0 to len-1 do begin with TConnection(Items[i]^) do begin // save description len1 := Length( Description ); stream.Write( len1, SizeOf( len1) ); stream.Write( PChar(Description)^, len1 ); // save host len1 := Length( Host ); stream.Write( len1, SizeOf( len1) ); stream.Write( PChar(Host)^, len1 ); // save user len1 := Length( User ); stream.Write( len1, SizeOf( len1) ); stream.Write( PChar(User)^, len1 ); // save password len1 := Length( Password ); stream.Write( len1, SizeOf( len1) ); stream.Write( PChar(Password)^, len1 ); // save port stream.Write( Port, SizeOf( Port ) ); // save TimeOut stream.Write( TimeOut, SizeOf( TimeOut ) ); // save UseCompression stream.Write( UseCompression, SizeOf( UseCompression ) ); // save UseTimeOut stream.Write( UseTimeOut, SizeOf( UseTimeOut ) ); end; end; finally stream.Free(); end; end; |
Re: record in datei speichern und laden
Spätestens bei so etwas würde ich auf Klassen und Streaming umsteigen.
|
Re: record in datei speichern und laden
ich hab noch etwas gegoogelt und das hier gefunden:
Code:
CubeMap:tCubeMapData;
AssignFile(cubemapfile,path+'.mat');
Rewrite (cubemapfile); for a:= Low (cubemap) to High (cubemap) do begin Write (cubemapfile,cubemap[a]); end; CloseFile (cubemapfile); result:=true CubeMapFile:file of tCubeMapData; a:integer; der path ist der dateiname als string. beim ausführen wird auch eine Datei geschrieben, doch ich weiss nicht wie ich sie lesen kann. hier noch mein record: type TCubeMapData=record name:string[255]; uptex,downtex,fronttex,backtex,lefttex,righttex:tp icture; mode:tgltexturemappingmode; end |
Re: record in datei speichern und laden
lesen ist ähnlich wie schreiben.
Grüße Klaus
Delphi-Quellcode:
edit: Read(cubemapfile,cubemap[i]);
AssignFile(cubemapfile,path+'.mat');
Reset(cubemapfile) i:=1; While not eof(cubemapfile) DO begin Read(cubemapfile,cubemap[i]); inc(i); end; CloseFile (cubemapfile); |
Re: record in datei speichern und laden
sorry, ich habe die falsche funktion aufgeführt, diese ist die richtige:
Delphi-Quellcode:
Wie kann ich diese lesen?
try
CubeMapFile:=TFileStream.Create(Pchar(path+'.mat'),fmCreate); CubeMapFile.WriteBuffer(CubeMap,Sizeof(CubeMap)); finally freeandnil(CubeMapFile); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz