c - Cross-platform metode til at oprette en mappe/mappe?

Indlæg af Hanne Mølgaard Plasc

Problem



Er der en måde at oprette en mappe/mappe 'i kode' ved hjælp af C, det er cross-platform? Eller skal jeg bruge præprocessoren til at angive hvilken metode der skal bruges?

Bedste reference


Du skal bruge en #define for at gøre dette.


For at holde din kode ren, vil du bruge en, der definerer Linux-funktionen til at oversætte til den tilsvarende Windows-funktion, når du kompilerer til Windows.


Øverst på din kildefil har du dette i et Windows-specifikt afsnit:


#include <windows.h>

#define mkdir(dir, mode) \_mkdir(dir)


Så senere kan du ringe til funktionen som denne:


mkdir("/tmp/mydir", 0755);


Her er nogle andre, der kan være nyttige:


#define open(name, ...) \_open(name, \_\_VA\_ARGS\_\_)
#define read(fd, buf, count) \_read(fd, buf, count)
#define close(fd) \_close(fd)
#define write(fd, buf, count) \_write(fd, buf, count)
#define dup2(fd1, fd2) \_dup2(fd1, fd2)
#define unlink(file) \_unlink(file)
#define rmdir(dir) \_rmdir(dir)
#define getpid() \_getpid()
#define usleep(t) Sleep((t)/1000)
#define sleep(t) Sleep((t)*1000)

Andre referencer 1



  Er der en måde at oprette en mappe/mappe 'i kode' ved hjælp af C, det er cross-platform?



Nej. C-sproget og standardbiblioteket har intet koncept af mapper overhovedet. Der er standard biblioteksfunktioner, især fopen(), der forbruger filnavne, hvilket koncept udsender stier (og dermed biblioteker), men standarden angiver: [6]



  Funktioner, der åbner yderligere (ikke-eksisterende) filer, kræver en fil
  navn, hvilket er en streng. Reglerne for at komponere gyldige filnavne er
  implementering definerede .



(C2011 7.21.3/8; vægt tilføjet)


Jeg ved, at det ikke taler direkte med spørgsmålet, men det er svært at bevise et negativt, og især at gøre det kortfattet. Jeg lægger vægt på det punkt, at sprogstandarden ikke engang ved, at biblioteker eksisterer, før du forsikrer dig om, at det især ikke har nogen støtte til at skabe dem.



  Eller skal jeg bruge præprocessoren til at angive hvilken metode der skal bruges?



Det ville være en konventionel måde at fortsætte. Der er flere måder, hvorpå du kan gennemføre detaljerne.