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...

    @elise:

    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.


Anmelden zum Antworten