2015-05-04 9 views
6

Nel file system boost esiste una funzione create_directory che crea una directory. Come creo un file? Potrei crearne uno definendo un oggetto boost::filesystem::ofstream ma questo aprirebbe anche il file, quindi dovrei chiamare close su di esso prima che potessi fare altre cose su di esso, come rinominare o eliminare. È questo l'unico modo?Come creare un file con boost filesystem senza aprirlo

risposta

5

Boost Filesystem V3 non fornisce una funzione touch(1);

Anche touch sarà creat + chiudere un file, basta guardare l'uscita di strace:

open("/tmp/q", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 47 
dup2(47, 0)        = 0 
close(47)        = 0 
utimensat(0, NULL, NULL, 0)    = 0 

penso che la cosa più ragionevole è quella di creare solo una funzione wrapper che chiude il file.

1

Si può solo usare qualcosa come

// ... code ... 
    boost::filesystem::ofstream("/path/to/file"); 
    boost::filesystem::rename("/path/to/file", "/path/to/renamed_file"); 
    // ... code ... 

che creerà un file vuoto e subito rinominarlo, senza necessità di chiudere in qualsiasi punto.