Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record-Array speichern ??? (https://www.delphipraxis.net/35835-record-array-speichern.html)

omisliebling 12. Dez 2004 12:59


Record-Array speichern ???
 
Hallo Leute !!!

Bin neu hier. Und hab gleich mal eine Frage an Euch.
Folgendes Problem:
Ich habe eine "CD Sammlung" geschrieben, in der ich Interpret, Albumtitel, Jahr, Tracks,
Genre und Dauer eingeben kann. Die habe ich in einen Record-Array geschrieben:
Delphi-Quellcode:
type
  cd_sammlung = record
    interpret : string [ 20 ];
    album    : string [ 30 ];
    jahr     : integer;
    tracks   : integer;
    genre    : string [ 20 ];
    zeit     : real;
    nummer   : integer;
  end;

  cdfeld = array [ 1..20 ] of cd_sammlung;

var alle_cd        : cdfeld;
Das klappt auch alles einwandfrei. Ich habe es in einer StringGrid ausgegeben.
Nun möchte ich den Record speichern:
Delphi-Quellcode:
procedure TForm1.btn_saveClick(Sender: TObject);
var
  i: integer;
  FileStr: TFileStream;
begin
  FileStr := TFileStream.Create('C:\Temp\Variable.dat', fmCreate);
  try
    FileStr.Write(anzahl, SizeOf(Integer) );
    for i := 0 to anzahl - 1 do
      FileStr.Write(alle_cd[i], SizeOf(cdfeld) );
  except
    showmessage('FETTIG!!!');
end;
end;
und über folgende Procedure wieder laden:
Delphi-Quellcode:
procedure TForm1.btn_loadClick(Sender: TObject);
var
  i: integer;
  FileStr: TFileStream;
begin
  FileStr := TFileStream.Create('C:\Temp\Variable.dat', fmOpenRead);
  FileStr.Read(anzahl, SizeOf(integer) );
  for i := 0 to anzahl - 1 do
    FileStr.Read(alle_cd[i], SizeOf(cdfeld) );
end;
Das ist alles schön und gut und funktioniert auch einmal, aber nachdem ich
die Datei einmal geladen habe und eine weitere CD eintragen möchte und diese wiederum
abspeichern möchte bringt er mir einen Fehler:
Datei "C:\Temp\Variable.dat" kann nicht erstellt werden. Der Prozess kann nicht auf die Datei zugreifen,
da sie von einem anderen Prozess verwendet wird.


Ich hoffe es kann mir jemand helfen.



Gruß omisliebling

glkgereon 12. Dez 2004 13:05

Re: Record-Array speichern ???
 
mach dahinter jeweils Filestr.Free!

das sollte funzen :wink:

fkerber 12. Dez 2004 13:11

Re: Record-Array speichern ???
 
Hi!

Ich würde da unbedingt nen Try..Finally-Block machen und dann im Finally den Filestream wieder freigeben.


Ciao Frederic

omisliebling 12. Dez 2004 13:15

Re: Record-Array speichern ???
 
Hi !!!

Könntet Ihr mir das ausführlich erklären (wo genau muss ich das hinschreiben) ???
Bin noch nicht der Ober-Checker in solchen Sachen...
Am besten Ihr könntet mir meinen Quelltext verbessern an der betreffenden Stelle.

THX im vorraus



Gruß omisliebling

fkerber 12. Dez 2004 13:17

Re: Record-Array speichern ???
 
Hi!

Herzlich Willkommen in der DP!

Ich glaube es gab dazu letzt ein Tutorial.
Schau mal in der entsprechenden Sparte.


Ciao Frederic

jim_raynor 12. Dez 2004 13:51

Re: Record-Array speichern ???
 
Ein weiterer Fehler müsste das SizeOf(cdfeld) sein. richtig ist SizeOf(cd_sammlung). Du willst ja in der Schleife jeweils ein Eintrag abspeichern. Dann musst du auch die größe von einem Eintrag nehmen ;)

omisliebling 12. Dez 2004 14:12

Re: Record-Array speichern ???
 
@ fkerber & glkgereon: DANKE, vielmals !!!!!!!
Es hat anscheind genau daran gelegen.
Ich habe einfach einen Try..Finally-Block hinzugefügt und den Filestream wieder freigeben.

@ jim_raynor: Danke auch für deine Hilfe, aber das musste ich nicht verändern. Es hat auch ohne
das funktioniert !!

@all: DANKE, nochmals vielen DANK !!!!! :wink:
IHRE SEIT DIE BESTEN !!!
So schnell habe ich noch NIE ein Problem gelöst!

:dp: :dp: :dp: :dp: :dp: :dp: :dp: :dp:



Gruß omisliebling

nailor 12. Dez 2004 14:14

Re: Record-Array speichern ???
 
@jimraynor-problematik: so wie ich das sehe, belegst du aber unnötig speicher.

omisliebling 12. Dez 2004 14:20

Re: Record-Array speichern ???
 
@ nailor: Hauptsache das Programm funktioniert !!! :wink: Um die Feinheiten kümmere ich mich zum Schluss.


Gruß omisliebling

jim_raynor 12. Dez 2004 15:31

Re: Record-Array speichern ???
 
Zitat:

Zitat von omisliebling
@ nailor: Hauptsache das Programm funktioniert !!! :wink: Um die Feinheiten kümmere ich mich zum Schluss.

Es kann aber zu Problemen führen, da du vermutlich auch zuviele bytes einliest. Dadurch überschreibst du dir irgendwo speicher. Und das kann massive Fehler verursachen. Ich würde es also sofort korrigieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz