funktion wie GetCurrentDirectory für DOS gesucht
-
hi folks!
ich suche eine funktion vergleichbar der GetCurrentDirectory von der WinAPI, muss jedoch mit C unter DOS laufen.
also einfach eine function die das CWD zurückgibt.
gibt es sowas schon, oder wird das schwieriger?oder alternativ wäre sogar noch etwas besser, wenn statt dem CWD der pfad der exe-datei zurückgegeben wird. so dass der wert immer stimmt, egal von wo aus ich die exe aufrufe.
danke im voraus,
---loki
-
Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
dirname Syntax #include <unistd.h> char * dirname (const char *fname); Description This function returns the directory part of the argument fname copied to a buffer allocated by calling malloc. The directory part is everything up to but not including the rightmost slash (either forward- or backslash) in fname. If fname includes a drive letter but no slashes, the function will return x:. where x is the drive letter. If fname includes neither the drive letter nor any slashes, "." will be returned. Trailing slashes are removed from the result, unless it is a root directory, with or without a drive letter. Return value The directory part in malloc'ed storage, or a NULL pointer of either there's not enough free memory, or fname is a NULL pointer. Portability not ANSI, not POSIX Example printf ("The parent of current directory is %s\n", dirname (getcwd (0, PATH_MAX)));
-
das sieht noch besser aus:
Syntax #include <unistd.h> char *getcwd(char *buffer, int max); Description Get the current directory. The return value includes the drive specifier. If buffer is NULL, getcwd allocates memory with malloc. This call fails if more than max characters are required to specify the current directory. Return Value The buffer, either buffer or a newly-allocated buffer, or NULL on error. Portability not ANSI, POSIX Example char *buf = (char *)malloc(PATH_MAX); if (buf && getcwd(buf, PATH_MAX)) { printf("cwd is %s\n", buf); free(buf); }
-
supi, vielen dank!
werd's gleich ausprobieren.kleine frage: woher stammt diese dokumentation?
*auchhabenwill*
-
treib dich mal auf den seiten von
www.delorie.com
rum, irgendwo da habe ich sie vor jahren mal entwendet. keine ahnung, ob es die heute noch gibt
-
Den Pfad der EXE-Datei bekommst du übrigens so:
int main(int argc, char *argv[]) { printf("Pfad der EXE: %s", argv[0]); return(0); }
-
Hallo,
AJ schrieb:
Den Pfad der EXE-Datei bekommst du übrigens so...
wobei hier immer angemerkt werden muß, daß es implementationsabhängig ist, ob nur der Programmname oder der vollständige Pfad in argv[0] bereitgestellt werden (oder sogar gar kein Programmname). Ich weiß allerdings nicht mehr, wie das unter DOS (üblich) war (so daß man meine Anmerkung vergessen kann, wenn du es sicher für DOS weißt, was dort übergeben wird), vollständig oder nicht, wollte aber nur darauf hingewiesen haben. Also einfach ausprobieren...
MfG
-
In DOS wird normalerweise der absolute Pfad übergeben inklusive Dateiname.
-
@AJ:
das beispiel funktioniert, aber es gibt mir den namen des directory der exe-datei an (unabhängig vom CWD) + den namen der exe-datei...
ich brauche aber nur den pfad...ich habe das 2. beispiel zuerst mit open watcom probiert, der meckert aber konstant über das CWD.
dann habe ich mir den ja angeblich etwas "adulteren" DJGPP geholt, der compiled das ding ohne einmal zu meckern!
das problem ist jetzt das resultat:
statt den pfad korrekt DOS-konform anzuzeigen ("c:\dir") zeigt er das ganze im UNIX-style: "c:/dir"...wie kann ich ihm das abgewöhnen?
vielen dank nochmal!
gruss,---loki
-
muss ich passen. habe hier nur den djgpp zum recherchieren, der spricht nur unistd, wenn es um solche dinge geht. finde erstmal nichts anderes.
er versteht jedoch die slashes.
wenn du dos machst, schau doch nochmal in den turbo c (oder tc lite). da gibt es eine getcwd, vielleicht ist das die dos version. du findest sie im header <Dir.h>
so long erstmal.
-
so, habe es jetzt auch endlich mit backslashes geschafft!
habe dazu meinem rechner den turbo c 3.0 ((c) 1990-92 by Borland) aufgezwungen. (läuft sogar auf winXP *würg*)
nach ein wenig tweaken der headerfiles lief es.thanx for the help!
greets,
---loki
-
@loki
Den Dateinamen kann man ganz einfach wegbekommen:int main(int argc, char *argv[]) { char exepfad[1024], * pos, vztrenner = '\\'; strcpy(exepfad, argv[0]); pos = strrchr(exepfad, vztrenner); if(pos) { *(++pos) = 0; //Hinter den letzten Verzeichnistrenner das Stringende setzen } ... }
Und die / sind übrigens Standard nicht \. Wenn du trotzdem die \ willst, dann musst du hald die / durch \ ersetzen im String.