Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Dateien aus Ordner laden problematisch (https://www.delphipraxis.net/116031-dateien-aus-ordner-laden-problematisch.html)

Lucifer 22. Jun 2008 01:09


Dateien aus Ordner laden problematisch
 
Hallo



Also mein Programm ladet Dateien aus verschiedenen Ordner.
Nun das Problem ist wo der Aktuelle Ordner ist.

Delphi-Quellcode:
  MapsDir='.\Maps\';
  DBDir='.\DB\';
  SaveDir='.\Savegame\';
  MusicDir='.\Music\';
  ItemsDir='.\Items\';
Ich hab in Variabeln stehen wo welche Dateien zu finden sind.

Das Problem ist wenn ich nach einem OpenDialog oder SaveDialog Execute nicht mehr im Ordner des Projectes bin
Zitat:

C:\Programme\Borland\Delphi7\Projects\Mover
Dann benutzt er den Ordner in welchem ich als letztes mit den beiden Dialogen etwas geladen oder gespeichert habe als Aktueller Ordner.

Und dann bekomm ich Fehlermeldungen dass er die Dateien nicht findet.

Dies ist unerwünscht.

Wie kann man sowas umgehen?

Christian Seehase 22. Jun 2008 02:19

Re: Dateien aus Ordner laden problematisch
 
Moin Lucifer,

da sehe ich grundsätzlich zwei Möglichkeiten:
  1. Die Dialoge bieten die Option NoChangeDir, mit der sich das wechseln des Pfades vermeiden lassen sollte.
  2. Keine relativen Pfade verwenden.

Ich bevorzuge Variante 2, da man dann immer genau nachvollziehen kann, worauf zugegriffen wird.
Man muss halt nur immer den Basispfad davorschreiben.

michaelg 22. Jun 2008 02:26

Re: Dateien aus Ordner laden problematisch
 
Du könntest Dir Deinen Exe-Pfad hinterher wieder setzen, egal wo Du mit dem Öffnendialog warst.

Delphi-Quellcode:
procedure TForm1.btnOpenClick(Sender: TObject);
begin
  OpenDlg.InitialDir:='c:\temp';
  if OpenDlg.Execute then begin
    //MachIrgendwas;
  end;
  chDir(ExtractFilePath(paramstr(0)));
end;
Mit OpenDlg.InitialDir gibst Du einen Pfad an, in dem der Öffnen-Dialog schon stehen soll, wenn er geöffnet wird.

ExtractFilePath gibt das Verzeichnis Deiner Exe zurück, paramstr(0) ist der Programmname inklusive Pfadangabe.
Mit chDir wechselst Du das Verzeichnis.

Luckie 22. Jun 2008 13:09

Re: Dateien aus Ordner laden problematisch
 
Zitat:

Zitat von Lucifer
Das Problem ist wenn ich nach einem OpenDialog oder SaveDialog Execute nicht mehr im Ordner des Projectes bin
Zitat:

C:\Programme\Borland\Delphi7\Projects\Mover
Dann benutzt er den Ordner in welchem ich als letztes mit den beiden Dialogen etwas geladen oder gespeichert habe als Aktueller Ordner.

Weil du relative Pfade benutzt und das so0llte man eben genau aus diesem Grund nicht machen.

Zitat:

Wie kann man sowas umgehen?
In dem du absolute Pfade benutzt. Mit ParamStr(0) bekommst du den Pfad zu deine Anwendung und mit ExtractFilepath das Verzeichnis deiner Anwendung.

@Christian und michaelg: Warum solche Krücken? Warum nicht gleich richtig machen? Oftmals ist es so, dass man aus dem Ordner noch mal eine Datei öffnen will oder sie dort wieder abspeichern will und dann finde ich es absolut nervig, wenn ich mich wieder bis in den Ordner durchklicken muss.

Christian Seehase 22. Jun 2008 13:42

Re: Dateien aus Ordner laden problematisch
 
Moin Michael,

dann sieh Dir bitte mal meinen Punkt 2 an ;-)

Luckie 22. Jun 2008 14:19

Re: Dateien aus Ordner laden problematisch
 
Ok, aber das du Punkt eins erst vorschlägst, wundert mich eigentlich ziemlich. ;)

Christian Seehase 22. Jun 2008 14:22

Re: Dateien aus Ordner laden problematisch
 
Moin Michael,

Zitat:

Zitat von Luckie
Ok, aber das du Punkt eins erst vorschlägst, wundert mich eigentlich ziemlich. ;)

Zitat:

Zitat von Christian Seehase
Ich bevorzuge Variante 2 ...

:gruebel: ;-)

Luckie 22. Jun 2008 14:24

Re: Dateien aus Ordner laden problematisch
 
Ich bin noch etwas durch den Wind. Eben hat es hier einen sehr heftigen Schauer gegeben und ich musste schnell die Balkontür zu machen.
























Leider habe ich vergessen, dass unser Kaninchen noch draussen saß. :mrgreen: Das musste ich eben mal schnell retten.

michaelg 22. Jun 2008 23:47

Re: Dateien aus Ordner laden problematisch
 
Hi Luckie,

mein Beispiel war ne Krücke, na gut. Aber mit paramstr den aufrufenden Pfad festzustellen finde ich in Ordnung. Dann also so:

Delphi-Quellcode:

procedure InitPfade;
var
  ExePfad:String;
begin
  ExePfad:=ExtractFilePath(paramstr(0));
  MapsDir:=ExePfad+'Maps\';
  DBDir:=ExePfad+'DB\';
end;
So ist es auf jeden Fall egal, was man mit dem Opendialog angestellt hat.

Lucifer 23. Jun 2008 00:45

Re: Dateien aus Ordner laden problematisch
 
Ich habs einfach mal so gemacht

Delphi-Quellcode:
exe:=Application.ExeName;
  exe:=ExtractFilePath(exe);
  SetCurrentDir(exe);
und dann einfach die NoChangeDirs eingeschaltet.
Bis jetzt hatt es gut geklappt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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