aktuelles Verzeichnis
-
Abend,
wie kann ich das aktuelle Verzeichnis, in dem das programm läuft (z.B. *.exe)
herausfinden.
Es gibt doch hier eine Möglichkeit über argc/argv, jedoch mit dem Namen des Programms.
Gibt es hier nicht auch eine extra Funktion, nur für den path ?Danke
worst_case
-
man getcwd()
-
Hi,
dazu musst du die dir.h includieren
mfg
v R
-
Danke !!
worst_case
-
Danke
worst_case
-
Original erstellt von virtuell Realisticer:
dazu musst du die dir.h includierenNee, wenn wir von Unix reden, brauchen wir unistd.h. Ist hier aber nicht Topic.
-
Wo wird hier von Unix geredet?
mfg
v R
-
a) Es gibt keinen normkonformen Weg, den Pfad herauszubekommen.
b) Jemand behauptete, das ginge mit getcwd. Das ist richtig, wenn es sich um ein System handelt, dass sich nach der Unixspezifikation richtet.
c) Ein anderer behauptet, dazu wäre ein Header Namens dir.h einzubinden. Dies mag für nicht genormte getcwd gelten, aber nicht für jene, die der susv gehorchen (diese benötigen unistd.h).Kurz: Es gibt getcwds, die dir.h benötigen, aber nirgendwo ist dies vorgeschrieben (es ist ja nicht mal vorgeschrieben, dass getcwd überhaupt irgendwas macht). Genau so richtig, wie dir.h könnte auch ente4.h sein. Ohne das System näher zu beschrieben ist eine Header- und Funktionsangabe nicht sinnvoll (bzw äquivalent zu planlosem Rumgerate).
Und es gibt getcwds, die unistd.h benötigen, dies wird manchmal vorgeschrieben, zB unter Unix.
-
Hi,
er sprach von "z. B. *.exe", also ging ich von dos/windows aus.
mfg
v R
-
windows.h :p
-
Dazu kommt noch eine Ungereimtheit: Er hat gesagt, er würde das auch über argv herauskriegen, nur dass da noch der Dateiname dabeisteht. IMHO ist das der Punkt: Unter Windows versteht man unter aktuellem Verzeichnis etwas anderes. Nämlich je nach Situation manchmal das Verzeichnis, in dem die Programmdatei liegt (das ist auch das, was in argv[0] drinsteht). Das "echte" aktuelle Verzeichnis ist eine technische Nebensächlichkeit, die für den User nicht wirklich relevant und nachvollziehbar ist.
Also muß man einfach nur aus argv[0] alles ab dem letzten Backslash abschneiden. Vielleicht sollte sich worst_case mal wieder melden ...
-
Hallo,
da habe ich ja einiges in's rollen gebracht.
Leider habe ich mich falsch ausgedrückt.1. Natürlich Linux (das mit der .exe ist aus alter Gewohnheit)
2. Ich möchte den Pfad feststellen in dem das Prog liegt z.b. /x.y/binIch wollte eigentlich nur wissen, ob es neben argv[] + abschneiden, eine fertige Funktion gibt die mir den Pfad sofort liefert, und ANSI-C Standard ist.
Sorry für die Verwirrungen
worst_case
-
ganz einfach: unter Unix ist das nicht möglich. argv[0] abschneiden tuts auch nicht.
-
Wie gesagt, unter Linux
#include <unistd.h> char *getcwd(char *buf, size_t size); char *get_current_dir_name(void); char *getwd(char *buf);
ANSI-C gibts da IMHO nichts
-
unter win32:
char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; _splitpath(argv[0],drive,dir,fname,ext); /* Pfad zu TNN.EXE ermitteln, */
_splitpath ist in stdlib.h definiert.
mfg Oliver Kern.
-
worst_case schrieb:
1. Natürlich Linux (das mit der .exe ist aus alter Gewohnheit)
2. Ich möchte den Pfad feststellen in dem das Prog liegt z.b. /x.y/bin
-
worst_case schrieb:
1. Natürlich Linux (das mit der .exe ist aus alter Gewohnheit)
2. Ich möchte den Pfad feststellen in dem das Prog liegt z.b. /x.y/bin
-
ja genau mit getcwd funktioniert das,
#include <unistd.h> #define MAXPATH 256 int main() { char *confpath; getcwd(confpath, MAXPATH); printf("Path: %s\n",confpath); return(0); }
mfg Oliver Kern.
-
für confpath ist kein Speicher alloziert -> Crash.
-
muss man fuer einen zeiger Speicher alloziert ?!
Programm laeuft fehlerfrei.
mfg Oliver Kern.