Wie kann ich ein neues Verzeichnis erstellen?



  • In ANSI C gibts leider keine Verzeichniss-Funktionen. In C++ gibts mkdir(), damit wirst du aber unter Linux, etc. Probleme bekommen.



  • Es muss doch eine Möglichkeit geben Verzeichnisse zu erstellen 😞 Vor C++ gab es doch auch schon Ordner?



  • ja die möglichkeit gibts ja auch aber eben nicht in ansi-c
    du musst das also für jedes os extra machen... ggf über defines wenn es ein programm sein soll dsa auf allen möglichen plattformen compilierbar sein soll



  • Das wäre ok. Mit den Sonderzeichen und Verzeichnis-Trennzeichen habe ich es auch mit define gemacht. Wo finde ich die Befehle? Ich bräuchte das dür Windows, Dos, OS2, BeOS, MacOS, Linux, Solaris, Unix und BSD.



  • mkdir
    Syntax
    
    #include <sys/stat.h>
    
    int mkdir(const char *path, mode_t mode);
    
    Description
    
    This function creates a subdirectory.
    
    All the bits except S_IWUSR in the mode argument are ignored under MS-DOS. If 
    S_IWUSR is not set in mode, the directory is created with read-only attribute
     bit set. Note that DOS itself ignores the read-only bit of directories, but 
    some programs do not.
    Return Value
    
    Zero if the subdirectory was created, nonzero on failure.
    Portability
    
    not ANSI, POSIX
    Example
    
    mkdir("/usr/tmp", S_IWUSR);
    

    beachte die 'portablity'

    hier noch ein link zur msdn
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_crt__mkdir.2c_._wmkdir.asp



  • Hallo!

    Danke für die Antwort. Leider exestiert bei mir in der Datei <sys/stat.h> keine mkdir-Funktion 😞 Ich nutze GCC 3.2

    Viele Grüße
    pmw



  • das ist ein problem bei der sache wenn du es komplett testen willst musst du es auf jedem os einzeln tun (sehr belastend 😃 )

    die os-spezifischen includes musst du auch in den #defines mit kapseln sonst meckert dir der kompiler natürlich

    ich weiss jetzt nicht auswendig wie die teile heissen weil mich ein programmieren ausserhalb von windows bisher nicht interessiert hat aber im prinzip müsste das so gehen

    #ifdef __WIN32__
    #include <.....>
    //directory erstellen
    #endif
    
    #ifdef __LINUX__
    #include <.....>
    //directory erstellen
    #endif
    //usw also ziemlich ätzend
    




  • Danke für die Antworten. Ich habe es jetzt wie folgt gelöst, allerdings nur unter Linux und WinXP bisher getestet:

    Header:

    #if defined(WIN32) || defined(__WIN32__) || defined(WIN16) || defined(__WIN16__) || defined(__TOS_WIN__) || defined(__NT__)
    || defined(MSDOS) || defined(__MSDOS__) || defined( __MS_DOS__) || defined(DOS) || defined(__DOS__)
    || defined(OS2) || defined(__OS2__) || defined(__TOS_OS2__)
    
       #define NonPOSIX  
       #define PathTrennZeichen '\\'
       #include <direct.h>
    
    #else
    
       #define POSIX  
       #define PathTrennZeichen '/'
       #include <sys/stat.h>
    
    #endif
    

    Im Programm:

    #ifdef POSIX
       mkdir(SZielDateiname, NULL); 
    #else
       _mkdir(SZielDateiname); 
    #endif
    


  • NOTE: Compilation and running of the program is only supported on POSIX systems.

    so oder aehnlich loese ich meine windows probleme 😉


Anmelden zum Antworten