Wie kann ich ein neues Verzeichnis erstellen?
-
Hallo!
Ich habe ein Project in ANSI C erstellt. Damit sich das Programm auf fast allen Betriebsystemen compileren lässt, habe ich nur die Dateien stdio.h und string.h eingebunden. Ich bin mit dem Programm jetzt auch komplett fertig, außer die Zeile, in der ein neues Verzeichnis erstellt werden soll. Wie kann ich das in ANSI C machen?
Viele Grüße
pmw
-
geht imho nicht in Ansi-c
-
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