Einzelnen Beitrag anzeigen

Benutzerbild von robinWie
robinWie

Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
 
Delphi 2005 Personal
 
#1

TIniFile - Zugriffverletzung??

  Alt 12. Mär 2006, 16:15
Hallo,
ich habe mir für ein Musik Programm ein System ausgedacht um eine art Datenbank zu erstellen. Da wird für jeden Eintrag eine Datei geschrieben (Basierent auf TIniFile). Nun habe ich nach der möglickeit gesucht beim Exportieren dieser "Datenbank" alle information in einer Inifile zu schrieben. Da geht auch
Delphi-Quellcode:
procedure ExportBase(From,FileName: string; Files: TFileListBox);
var
 F,F2: TiniFile;
 i,i2: integer;
 Sec: string;
begin
  Files.Mask:='*.';
  F:=TIniFile.Create(FileName);
  F.WriteInteger('Count','Files',Files.Items.Count-1);
  for i:=0 to Files.Items.count-1 do begin
    Files.ItemIndex:=i;
    F.WriteString('FilesList','File '+IntToStr(i),ExtractFileName(Files.FileName));
  end;
  for i:=0 to Files.Items.Count-1 do begin
    Files.ItemIndex:=i;
    F2:=TiniFIle.Create(Files.FileName);
    Sec:=ExtractFileName(Files.FileName);
    F.WriteString(Sec,'FileName',F2.ReadString('File','FileName',''));
    F.WriteString(Sec,'Title',F2.ReadString('ID','Title',''));
    F.WriteString(Sec,'Artist',F2.ReadString('ID','Artist',''));
    F.WriteString(Sec,'Album',F2.ReadString('ID','Album',''));
    F.WriteString(Sec,'Genre',F2.ReadString('ID','Genre',''));
    F.WriteString(Sec,'Year',F2.ReadString('ID','Year',''));
    F.WriteInteger(Sec,'Vote',F2.ReadInteger('ID','Vote',0));
    F.WriteInteger(Sec,'CCount',F2.ReadInteger('C','Comments',0));
    for i2:=0 to F2.ReadInteger('C','Comments',0) do
     F.WriteString(Sec,'C_Line '+IntToStr(i2),F2.ReadString('Comment','Line '+IntToStr(i2),''));
  end;
end;
Um die eine Datei wieder in mehrere Dateien "aufzuspalten" habe ich mir folgende Möglichkeit überlegt, bei der aber eine Zugriffverletzung auftritt.
Delphi-Quellcode:
var
 F,F2: TiniFile;
 i,i2: integer;
 Sec: string;
begin
 F:=TiniFile.Create('D:\Programme\Music Discover\files\Export.exp');
 for i:=0 to F.ReadInteger('Count','Files',0) do begin
  Sec:=F.ReadString('FileList','File '+IntToStr(i),'');
  F2:=TiniFile.Create('D:\Programme\Music Discover\files\'+Sec);
  F2.WriteString('File','FileName',F.ReadString(Sec,'FileName','')); //Hier tritt die Zugriffsverletzung auf
  F2.WriteString('ID','Title',F.ReadString(Sec,'Title',''));
  F2.WriteString('ID','Artist',F.ReadString(Sec,'Artist',''));
  F2.WriteString('ID','Album',F.ReadString(Sec,'Ablum',''));
  F2.WriteString('ID','Genre',F.ReadString(Sec,'Genre',''));
  F2.WriteString('ID','Year',F.ReadString(Sec,'Year',''));
  F2.WriteInteger('ID','Vote',F.ReadInteger(Sec,'Vote',0));
  F2.WriteInteger('C','Comments',F.ReadInteger(Sec,'Comments',0));
  for i2:=0 to F.ReadInteger(Sec,'Comments',0) do
    F2.WriteString('Comment','Line '+IntToStr(i2),F.ReadString(Sec,'Line '+IntToStr(i2),''));
  end;
end;
[edit] ich habe mich mit den Code abschnitten vertan. [/edit]

kann mir jemand Helfen?
Danke im Voraus
Robin W.
Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen
  Mit Zitat antworten Zitat