Einzelnen Beitrag anzeigen

Benutzerbild von SoD
SoD

Registriert seit: 9. Dez 2008
Ort: Oberasbach
33 Beiträge
 
Delphi 2007 Professional
 
#1

Fehlende Dateien in INI nicht laden/anzeigen

  Alt 21. Apr 2009, 10:05
Fortsetzung dieses Threads: http://www.delphipraxis.net/internal...t.php?t=154330

Hallo liebe DPler,

in meinem letzten Thread ging es darum, aus einer INI-Datei 3 Komponenten zu speißen - MediaPlayer, ListBox & Memo. Mit der Hilfe aus dem Forum hab ich es wunderbar hinbekommen (Nochmals vielen Dank dafür! ). Nun soll das Programm erweitert werden und ich stehe mit selbem Projekt vor einem neuen Problem, das ich selbst nach Stunden des Tüftelns und Rumprobierens nicht in den Griff bekomme.

Nun brauche ich erneut eure Hilfe, es geht um Folgendes:

Da mein Programm seine ganzen Informationen aus einer INI zu beziehen hat kann es auch einmal zu Fehleintragungen in der INI selbst kommen. Nun soll der User nicht gleich durch Fehlermeldungen aus der Ruhe gebracht werden, sondern das Programm soll folgendermaßen reagieren:

1. Ließ die INI
2. Prüfe ob die Dateipfade aus der INI zu existierenden Dateien führen
3. Liste fehlerhafte Einträge gar nicht erst auf

Das Prüfen mit FileExists funktioniert und der Eintrag komm in der ListBox nicht vor, ABER mein Programm läd lediglich den Namen aus der nächsten Section, Pfad (MediaPlayer) und Beschreibung (Memo) werden aus der Section geladen, die eigentlich übersprungen werden sollte. Kurzum: Er lädt Titel 3 obwohl 4 gewählt wurde.

Das direkte Löschen der fehlerbehafteten Section aus der INI hat den Fehler auch nicht behoben (Er hat glaub ich sogar ne Exception geschmissen, weil Listenindex > Maximum).

Ich hab auch mit mehreren internen TStringLists versucht, die INI komplett in mein Programm zu laden und programmintern die Einträge zu löschen, was aber an den (nicht) bereitgestellten Methoden scheiterte (oder sie sind mir noch unbekannt).

Hier noch der Code:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  Sektionen: TStringList;
begin
  VideoIni := TIniFile.Create(PChar(ExtractFilePath(ParamStr(0)) + 'files.ini'));
  Sektionen := TStringList.Create;
  ListBoxFiles.Items.Clear;
  VideoIni.ReadSections(Sektionen); // Alle Sektionsnamen sind nun in Sektionen gespeichert.

  for i := 0 to Sektionen.Count - 1 do
  if FileExists(VideoIni.ReadString(Sektionen[i],'Path','')) then //Prüfe auf vorhandene Datei
    begin
      ListBoxFiles.Items.Add(VideoIni.ReadString(Sektionen[i], 'Name','')); //Wenn vorhanden -> ListBox Eintrag hinzufügen
    end;
end;

procedure TForm1.ListBoxFilesClick(Sender: TObject);
begin
  try
    MemoDesc.Text := VideoIni.ReadString('Video' + IntToStr(ListBoxFiles.ItemIndex),'Desc','KEINE BESCHREIBUNG VORHANDEN'); //Lade Beschreibung
    MediaPlayerControl.FileName := VideoIni.ReadString('Video' + IntToStr(ListBoxFiles.ItemIndex),'Path',''); //Setze Dateiname für ausgewähltes Video
    MediaPlayerControl.Open;
  except
    error_with_file; //Falls dennoch was schief geht
  end;
end;
Vielen Dank schon mal für eure Mühen,

MfG
SoD
Keinen Bock anständig zu debuggen?
try stuff;
except ShowMessage('Bug, bug, bug!!! Dont do this shit!');
end;
  Mit Zitat antworten Zitat