Forum: PC-Programmierung Schreibweise für relative Verzeichnisangabe


von Schlumpfine (Gast)


Lesenswert?

Moin,
mein C-Programm soll auf die Datei per fopen zugreifen, die im 
Verzeichnis liegt, wo die ausführbare Datei liegt, die gerade verwendet 
wird. Mit der Angabe von "Dateiname.txt" funktioniert das auch, wenn ich 
die exe anklicke, und die Textdatei im gleichen Verzeichnis liegt.
Wenn ich die exe per Konsole aufrufe, und ich mich z.B. in c:\ befinde, 
die exe aber in d:\ liegt, wird die Datei c:\Dateiname.txt aufgerufen.
Gibt es eine Verzeichnisangabe, die sich auf das Verzeichnis bezieht, wo 
die exe drin ist?

von Klaus W. (mfgkw)


Lesenswert?

Eigentlich nicht.

Aber du kannst dir mal in main() das erste Argument ausgeben lassen:
1
int main( int nargs, char **args )
2
{
3
    puts( args[0] );
4
}

Das ist der Name des aufgerufenen Programms.
Meines Wissens steht da unter Windows der volle Pfad mit dabei.
Falls ja, könntest du das nutzen um daraus den Pfad der Exe zu bekommen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

In DOS/Windows habe ich meist argv[0] benutzt wie von Klaus beschrieben.
Wenn das Programm nur unter Windows laufen soll, ist GetModuleFileName
aber die sicherere Lösung:

  http://stackoverflow.com/questions/383973/is-args0-guaranteed-to-be-the-path-of-execution

Wenn das Ganze portabel sein soll, wird es ziemlich schwierig:

  http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe

Evtl. behilft man sich dann mit #ifdef-Konstrukten.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

im Programm schon, siehe Vorredner. Aber nicht in einer Konsole, da hat 
jede ihr eigenes aktuelles Verzeichnis, und das ist höchstens zufällig 
das mit der EXE.

Seit DOS gibt es die Path-Variable, aber die müsste global gesetzt sein 
und dann versaut man das System mit Path-Einträgen für jede denkbare 
Software.

Gruss Reinhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.