![]() |
Verzeichnis auf Existenz prüfen?
Hallo,
hab folgendes Problem: ich prüfe wie folgt auf Existenz einer Datei:
Delphi-Quellcode:
der Code funktioniert soweit gut, aber nur! wenn das Verzeichnis "UserAppDataDir + AppDataRootDir + AppDataProjectDir" existieren. Wir das Programm das erste mal am PC gestartet gibt es auch logischerweise noch nicht, aber dann funkt auch mein Code nicht und beim Erststart wird die ersatz.txt nicht geladen.
if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\original.txt') then
begin ListBox1.Items.LoadFromFile(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\original.txt'); end else ListBox1.Items.LoadFromFile('ersatz.txt'); (hier wird die Datei aus dem Programmverzeichnis geladen) Wie prüfe ich also auf Existenz eines Ordners bzw. Verzeichnisses? |
Re: Verzeichnis auf Existenz prüfen?
Du könntest die Ordner mit ForceDirectories erstellen.
Ansonsten DirectoryExists. |
Re: Verzeichnis auf Existenz prüfen?
Und immer schön lokale Zwischenvariablen verwenden!!
Das hilft beim Debuggen und mancht den Code klarer und besser.
Delphi-Quellcode:
var
filename : string; begin filename := UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\original.txt'; // sollte nun in filename ein Backslash fehlen oder zuviel sein, fällt das beim Debuggen sicher auf ... |
Re: Verzeichnis auf Existenz prüfen?
Zitat:
|
Re: Verzeichnis auf Existenz prüfen?
Hab das jetzt so gelöst
Delphi-Quellcode:
wenn das Verzeichnis existiert wird "Ja" angezeigt, wenn nicht kommt die Meldung "Nein" gar nicht, wer weiß wieso?
if DirectoryExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir) then
begin showmessage('Ja'); end else showmessage('Nein'); |
Re: Verzeichnis auf Existenz prüfen?
Zitat:
|
Re: Verzeichnis auf Existenz prüfen?
weil das aktuelle Vereichnis nicht unbedingt das Programmverzeichnis sein muß.
|
Re: Verzeichnis auf Existenz prüfen?
Zitat:
Wie komme ich dann an das Programmverzeichnis? Gibt' dafür ein Befehl oder muss man ne Funktion schreiben? |
Re: Verzeichnis auf Existenz prüfen?
Hab schon gefunden
Delphi-Quellcode:
aber wieso funkt der Code im Post #5 nicht das verstehe ich nicht. :gruebel:
Path := ExtractFilePath(ParamStr(0));
|
Re: Verzeichnis auf Existenz prüfen?
Und ich verstehe nicht, wieso Du Dir Dein Verzeichnis immer noch ständig neu zusammenbastelst. Ich hatte Dir doch erklärt, wie das mit Konstanten und privaten Feldern besser geht.
|
Re: Verzeichnis auf Existenz prüfen?
Zitat:
|
Re: Verzeichnis auf Existenz prüfen?
Der Code ist aber eigentlich in Ordnung. Steht da vielleicht noch was anderes dazwischen?
|
Re: Verzeichnis auf Existenz prüfen?
Ne nix dazwischen, eins zu eins kopiert.
Das wird im Ereignis TForm1.FormShow aufgerufen, vllt liegt hier der Fehler? :gruebel: |
Re: Verzeichnis auf Existenz prüfen?
Daran kann es nicht liegen. Zeig mal den ganzen Code vom FormShow.
|
Re: Verzeichnis auf Existenz prüfen?
Delphi-Quellcode:
PS. Das mit deinem Vorschlag werde ich noch umsetzen.
procedure TForm1.FormShow(Sender: TObject);
var update: Integer; Ini : TIniFile; UserAppDataDir, ProgPath: String; begin UserAppDataDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA); if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config.ini') then begin Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config.ini'); try ComboBox1.ItemIndex := Ini.ReadInteger('Default', 'Channel', 1); finally ini.free; end; if DirectoryExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir) then begin showmessage('Ja'); end else showmessage('Nein'); ProgPath := ExtractFilePath(ParamStr(0)); if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\original.txt') then begin ListBox1.Items.LoadFromFile(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\original.txt'); end else ListBox1.Items.LoadFromFile(ProgPath + 'ersatz.txt'); end; |
Re: Verzeichnis auf Existenz prüfen?
Hab ich mich verzählt oder fehlt da ein "end;"?
|
Re: Verzeichnis auf Existenz prüfen?
Hab wahrscheinlich nicht mitkopiert, aber das Programm läuft, also es fehlt nichts. Wie gesagt "Ja" wird ausgegeben, dann lösche ich den Ordner "AppDataProjectDir" und die Meldung "Nein" springt nicht auf.
|
Re: Verzeichnis auf Existenz prüfen?
Natürlich nicht, da als erste Bedingung geprüft wird, ob die Ini existiert. Kann sie aber nicht, wenn es das Verzeichnis gar nicht gibt. Wenn Du vernünftig einrücken würdest, hättest Du das wahrscheinlich auch gesehen ;)
|
Re: Verzeichnis auf Existenz prüfen?
Ja und was hat das damit zutun, ja die ini existiert nicht, aber danach wird ja wieder nach nem anderem Verzeichnis gefragt. :gruebel: Verstehe ich nicht.
|
Re: Verzeichnis auf Existenz prüfen?
Aaaaaa jetzt verstehe ich, der Ordner wird ja für ini erstellt, genau. :dancer2:
|
Re: Verzeichnis auf Existenz prüfen?
Trotzdem habe ich Deinen Code mal neu formatiert:
Delphi-Quellcode:
Bei nachvollziehbarer Einrückung sieht man das sofort :zwinker:
procedure TForm1.FormShow(Sender: TObject);
var update: Integer; Ini : TIniFile; UserAppDataDir, ProgPath: String; begin UserAppDataDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA); if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config.ini') then //dieser Block wird niemals ausgeführt, wenn die Ini nicht existiert begin Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config.ini'); try ComboBox1.ItemIndex := Ini.ReadInteger('Default', 'Channel', 1); finally ini.free; end; if DirectoryExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir) then begin showmessage('Ja'); end else showmessage('Nein'); ProgPath := ExtractFilePath(ParamStr(0)); if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\original.txt') then begin ListBox1.Items.LoadFromFile(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\original.txt'); end else ListBox1.Items.LoadFromFile(ProgPath + 'ersatz.txt'); end; end; |
Re: Verzeichnis auf Existenz prüfen?
Hab das Programm noch mal gestartet, ohne Code zu ändern, und es wird auf einmal nix erstellt, nicht die ini und nicht der Ordner, jetzt verstehe ich garnix. :wall:
Aber danke dir, ich gucke mal jetzt weiter. |
Re: Verzeichnis auf Existenz prüfen?
Hab die Geschichte mit der .ini am Ende der procedure gesetzt und jetzt funkt alles, aber wirklich alles. :dancer2:
Thx noch mal. :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz