Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EFOpenError findet Datei nicht (https://www.delphipraxis.net/145189-efopenerror-findet-datei-nicht.html)

Wolfsherz 25. Dez 2009 20:02


EFOpenError findet Datei nicht
 
Hallo,

bei folgender Funktion bekomme ich eine EFOpenError-Fehlermeldung, obwohl der Pfad für meinen PC 100% stimmt. Dass ich den noch mit einer "SHGetSpecialFolderPath Function" oder "SHGetFolderPath Function" habe ich nach einiger Recherche schon herausgefunden, allerdings soll es ja erstmal überhaupt klappen, bevor ich es allgemein gestalte.

Frage: Wieso kann er die Datei "Spionageberichte.txt" nicht öffnen, obwohl der Pfad eindeutig stimmt?

Delphi-Quellcode:
function LadeSpio(Pfad: string): String;
var Spio: TStringList;
begin
  Spio := TStringList.Create;
  try
    try
      Spio.LoadFromFile('F:\Eigene Dateien\Ordner1\' + Pfad + '\Spionageberichte.txt');
    except
      Showmessage('Fehler (01). Bei Fragen bitte an den Support wenden.' + #13 +
      'Die Datei ist nicht vorhanden. Bitte eventuell den Dateipfad nachprüfen.');
    end;
  finally
    Spio.Free;
  end;
  result := Spio.text;
end;

Vielen Dank für eure Mühe.

ringli 25. Dez 2009 20:14

Re: EFOpenError findet Datei nicht
 
Das könnte daran liegen das du via
Delphi-Quellcode:
result := Spio.text;
auf Spio zugreifst obwohl du vorher schon
Delphi-Quellcode:
Spio.Free
aufgerufen hast.

[EDIT]
Wie sollte der Pfad zur Datei eigentlich wirklich bei dir aussehen? Weil so wie es im Moment aussieht vermischt du deinen festen Pfad mit einer Variable was in diesem Fall auch in die Hose gehen könnte.

Wolfsherz 25. Dez 2009 20:24

Re: EFOpenError findet Datei nicht
 
Ruft er das nicht nur auf, wenn das "Try" erfolglos war?
Außerdem habe ich es gerade mal ohne probiert, aber es kam die selbe Fehlermeldung.
Das war's wohl leider nicht. :(

Also "Pfad" ist ein variabler Ordnername, den ich in einem TEdit-Feld eingeben kann. Beispielsweise: "Spieler1".
Dann wäre der komplette Pfad: "F:\Eigene Dateien\Ordner1\Spieler1\Spionageberichte\Spionage bericht.txt"

Aber gerade, wo ich das schreibe, merke ich, dass ich ein "Spionageberichte" zu wenig eingefügt hatte. Oh mann, dabei habe ich den Pfad extra drei Mal überprüft. Vielen Dank, du hast mich gewaltsam mit der Nase draufgestoßen. ;p

[Edit]
Soll ich für eine neue Frage (zum SHGetFolderPath) jetzt eigentlich ein neues Thema eröffnen oder kann ich hier weiterfragen? :)

sx2008 25. Dez 2009 20:33

Re: EFOpenError findet Datei nicht
 
Du hast mindestens zwei Fehler in deinem Code.
Fehler 1:
wenn du einen Dateinamen aus mehreren Teilen zusammensetzt, dann achte darauf, dass es immer eine Zwischenvariable gibt.
Delphi-Quellcode:
function LadeSpio(Pfad: string): String;
var Spio: TStringList;
  dateiname:string;
begin
  dateiname := 'F:\Eigene Dateien\Ordner1\' + Pfad + '\Spionageberichte.txt';
Nur mit der Zwischenvariable kannst du herausfinden, ob der Dateiname inkl. Pfad wirklich in Ordnung ist

Fehler 2:
deine Fehlermeldung ist ziemlich "gaga".
Gib dem Benutzer eine Fehlermeldung mit der er auch wirklich etwas anfangen kann.
Zwingend notwendig wäre hier der volle Dateiname!
Delphi-Quellcode:
try
   Spio.LoadFromFile(dateiname);
except
  on E:Exception do
  begin
    E.Message := 'Spionagebericht kann nicht geladen werden'#13#10+
   'Die Datei '+dateiname+' ist nicht vorhanden. Bitte eventuell den Dateipfad nachprüfen.'#13#10+
    E.Message;
    raise;
  end;
end;

Wolfsherz 25. Dez 2009 20:38

Re: EFOpenError findet Datei nicht
 
Hm, stimmt! Das hätte mir die Fehlersuche mithilfe von F8 wohl erleichtert. Werde drauf achten, vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.

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