2012-08-17 30 views
9

He visto algunas publicaciones relacionadas con mi pregunta, pero ninguna que lo aborde por completo. Necesito crear un archivo en el directorio temporal estándar y luego de terminar de escribir en él, moverlo a una ubicación diferente. La idea es que el archivo se considere temporal mientras se descarga y permanente una vez que se complete la descarga.¿Cómo obtener un nombre de archivo temporal?

Estoy intentando esto llamando mkstemp o , luego rename después de que haya terminado de escribir en él. Sin embargo, necesito la ruta completa del archivo para llamar el cambio de nombre, y aparentemente obtener el nombre de archivo de un descriptor de archivo (devuelto por mkstemp) o ARCHIVO * (devuelto por tmpfile) no es un proceso trivial. Se puede hacer, pero no es elegante.

¿Hay una llamada al sistema que creará un archivo temporal y me proporcionará el nombre? Sé acerca de mktemp y llamadas relacionadas, pero no se garantiza que sean únicas o están en desuso. O tal vez haya una mejor manera de lograr crear, escribir y mover archivos temporales.

Respuesta

10

Parece que mkstemp es realmente el camino a seguir.

int fd; 
char name[] = "/tmp/fileXXXXXX"; 
fd = mkstemp(name); 
/* Check fd. */ 

Después de esta llamada que tienen un descriptor válido en fd y el nombre del archivo asociado en name.

+0

Tiene razón, y necesito ser más minucioso cuando leo la documentación. Llámame OCD, pero utilicé la información en [esta publicación] (http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu) para obtener la carpeta temporal en lugar de simplemente codificar "/ tmp"; – jorgander

+0

Si está creando un archivo en/tmp/y está planeando mover el archivo a una ubicación específica, diga "/ home//luego le tomará mucho tiempo copiar o mover y será aún peor si/tmp y/home/were en un área de partición diferente; mejor crear archivo en/home//fileXXXXX y cambiarle el nombre a/home//file. – Viswesn

+0

¿Cuál es el nombre de archivo final? –

Cuestiones relacionadas