Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
Delphi 2005 Personal
|
TIniFile - Zugriffverletzung??
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
|