Entwickler-Ecke

Dateizugriff - Relative Verzeichnispfade


Cosmic - Do 09.01.03 09:16
Titel: Relative Verzeichnispfade
Hi,
um einige Berechnugen zu tätigen, übergebe ich meinem Programm ein festes Verzeichnis (Gruß an Klabautermann!). Soooo wenn ich nun aber Installshield nehme und ein anderes Installationsverzeichnis wähle, klappt nix mehr. Also gibt es bestimmt einen Befehl, der Verzeichnisse relativ zur Programmdatei (wo die exe liegt und somit das Programm installiert ist) festlegt.

Hier der jetzige feste Pfad. Die EXE liegt in Order "4", das wichtige Verzeichnis ist "planfall1".


Quelltext
1:
DatabaseName := 'C:\Programme\Borland\Delphi7\Projects\Projects2\4\planfall1';                    


Der neue Code müste vielleicht so aussehen:


Quelltext
1:
DatabaseName := '...\4\planfall1';                    


Nur das kann natürlich nicht klappen, weil Delphi so nach dem Verzeichnis C:\4\planfall1 sucht, was es ja nicht gibt.

Aber auch andere kombinationen lassen mich im Stich...
ob mit oder one "\" nix funktioniert .....
Ich vermute dass das so gar nicht klappen kann.

Ciao Cosmic

-----------------------------------------
Letz Fet´s heute beginnt Dein Leben


Keldorn - Do 09.01.03 09:47

Hallo


Quelltext
1:
  ProgDir := extractFilepath(Application.exename);                    

oder du arbeitest mit paramstr(0)

damit erhälst du das verzeichnis, wo deine Exe drin ist und kannst dann die Unterverzeichnisse erreichen

Mfg Frank


Cosmic - Do 09.01.03 11:04
Titel: klingt gut
Hi,
klingt gut, aber so ganz durchblicke ich das noch nicht.

Sieht das so aus ?
Also z.B.


Quelltext
1:
2:
ProgDir := extractFilepath(Application.exename);
databasename := ('ProgDir\planfall1')


Das klappt aber leider nicht.
Wenn ich die " ' " weg lasse meldet Delphi, das ein illegal Chart "\" im Code ist. Und mit " ' " findet es das Verzeichnis nicht ?
Auch wenn ich versuche die Verzeichnisse außerhalb des CopyDir Befehls zu verändern und als Variable übergebe, scheitert es am hinzufügen des Verzeichnisses.....

Das Pfad der exe wird aber einwandfrei ausgelesen.

Gruß Cosmic

-----------------------------------------
Letz Fet´s heute beginnt Dein Leben


Klabautermann - Do 09.01.03 11:11

Hallo,

du kannst stings einfach mit dem Plus (+) Operator aneinander hängen. Also z.B. so:


Quelltext
1:
2:
3:
ProgDir := extractFilepath(Application.exename);
databasename := (ProgDir + 'planfall1');
INI := tIniFile.Create(ProgDir + 'config.ini');

Einfach den Variablennamen in den String schreiben, wie du es versucht hast, funktioniert natürlich nicht.

Gruß
Klabautermann


Keldorn - Do 09.01.03 11:12

progdir ist doch eine variable! :roll:

Quelltext
1:
2:
3:
4:
 
databasename := progdir+'\planfall'
oder gleich
databasename := extractfilepath(...)+'\planfall'

gugg aber mal in die OH zu extractfilepath, ob evtl der \ schon mit dabei ist.

edit : da war wohl einer schneller :D

Mfg Frank


LCS - Do 09.01.03 11:15

Keldorn hat folgendes geschrieben:

gugg aber mal in die OH zu extractfilepath, ob evtl der \ schon mit dabei ist.

Ist er.

Gruss Lothar


Cosmic - Do 09.01.03 11:34
Titel: Klasse
Super!
Danke an alle !
AUf die einfachsten Möglichkeiten kommt man ja meinstens eh nicht so schnell :P
Danke ciao Cosmic

Tja und als ob es nicht da Probleme gäbe.....
So kann ich ja leider auch alle möglichen Verzeichnisse laden! Wie unpassend ! Desshalb habe ich mir folgendes ausgedacht:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Dir := 'C:\';
if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate,     
sdPrompt],SELDIRHELP) then
  Begin
    If FileExists((Dir+'valid')) then
    Begin
      x := (Dir);
      if CopyDir(x,extractfilepath(Application.exename)) = True then
      begin
        MessageBox(0,'Projekt geladen.','Hinweis',16);
      end;
    end
      else
    begin
        MessageBox(0,'Ungültiges Verzeichnis','Problem',16);
    End;
  End;


Also es muß die Datei Valid im Ordner sein damit er kopiert wird. An sich fand ich meine Idee toll :oops:
Nur leider findet er irgendwie die Datei nicht...... Dumm gelaufen ;)
Ich glaube, das ich die Datei nicht mit folgendem definieren darf.

Quelltext
1:
2:
 
If FileExists((Dir+'valid')) then

Auch 100 andere Kombos wollen nicht so recht. Was habe ich mal wieder übersehen?!

-----------------------------------------
Letz Fet´s heute beginnt Dein Leben