2010-01-16 18 views
14

Estoy tratando de leer datos de un archivo de texto, borrarlo y luego escribir en él, en ese orden usando la clase fstream.Leer del archivo, borrarlo, escribir en él

Mi pregunta es cómo borrar un archivo después de leerlo. Sé que puedo abrir un archivo y borrarlo al mismo tiempo, pero ¿hay alguna función a la que pueda llamar para borrar sus contenidos?

Respuesta

15

Debe abrirlo, realizar sus operaciones de entrada, y luego cerrarlo y volver a abrirlo con el conjunto de indicadores std :: fstream :: trunc.

#include <fstream> 

int main() 
{ 
    std::fstream f; 
    f.open("file", std::fstream::in); 

    // read data 

    f.close(); 
    f.open("file", std::fstream::out | std::fstream::trunc); 

    // write data 

    f.close(); 

    return 0; 
} 
4

Si quieres estar totalmente seguro en caso de un accidente u otro evento desastroso, que debe hacer la escritura a un segundo archivo, temporal. Una vez finalizado, elimine el primer archivo y cambie el nombre del archivo temporal al primer archivo. Consulte la biblioteca Boost Filesystem para obtener ayuda al hacer esto.

+0

Hecho así, todavía hay un espacio entre la eliminación y el cambio de nombre. En los sistemas de archivos UNIX, debe fsync, omita la eliminación y simplemente cambie el nombre del archivo temporal por el primer archivo; será reemplazado atómicamente. En Windows, NTFS tiene una función especial ReplaceFile; Los reemplazos atómicos no son factibles en otros sistemas de archivos AFAIK. – ephemient

Cuestiones relacionadas