aktuelles Verzeichnis
-
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.
-
daa531 schrieb:
muss man fuer einen zeiger Speicher alloziert ?!
Programm laeuft fehlerfrei. ...
Für den Zeiger brauchst Du keinen Speicher bereitstellen. Wohl aber für die Daten, die Du Dir von der Funktion getcwd() erhoffst. Woll soll denn der Pfad (das verzeichnis) hinterlegt werden??
Meine Doku über getcwd() behauptet weiterhin, dass wenn der erste Parameter NULL ist, getcwd() selbstständig malloc() aufruft und einen Zeiger auf diesen Bereich (oder im Fehlerfall NULL) zurückliefert.
-
daa531 schrieb:
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.
Wo bekommst du "argv" unter Windows her? Ich habe eine dialogbasierte Anwendung und bräuchte auch den Pfad der Anwendung...
Danke. Edward
-
Bashar schrieb:
Also muß man einfach nur aus argv[0] alles ab dem letzten Backslash abschneiden. Vielleicht sollte sich worst_case mal wieder melden ...
Ist auch unter Windows nicht eindeutig.
Generell steht in argv[0] nur, wie das Programm aufgerufen wurde. Klickt man im Explorer auf eine exe, ist dass der komplette Pfad, startet man's aus ner Dosbox (ohne Pfadangabe) steht der Pfad auch nicht drin.
Will man unter Windows wirklich den korrekten Pfad haben, brauch man GetModuleFilename().
.oO( wie oft hab ich das eigentlich schon gepostet...
)