C/Visual C - Crear directorio y fichero dentro del mismo

 
Vista:

Crear directorio y fichero dentro del mismo

Publicado por LuisDa (10 intervenciones) el 04/06/2009 11:07:48
Hola:

Necesito una función que haga lo siguiente: dado un path con su fichero, que dicha función cree el directorio y, dentro de la última subcarpeta, el fichero.

Por ejemplo: Necesito crear (no existe previamente) un fichero datos.txt en el directorio:

c:ficheros esultadosinfo, esto es, el path completo sería:

c:ficheros esultadosinfodatos.txt

Y que eso mismo lo haga una función de C cada vez que le pase ese path en forma de cadena de caracteres. Digamos que la función sería:

void create_path_file (char * path) {

... // Aquí hará lo que he comentado

}

¿Alguien la ha hecho ya? Si no me tocará currármela, pero si alguien la tiene, que la comparta :D .

PD: Uso Windows XP y sé cómo hacer que cree el directorio (con la función system y llamando dentro de ésta al comando md o mkdir seguido de la ruta a crear), o bien que cree el fichero con el path completo (abriéndolo en modo "w", "a" o "a+b"), pero en este caso el directorio debe existir previamente. Si el mkdir diera la posibilidad de crear directamente el fichero dentro de la última subcarpeta, mi problema estaría solucionado, pero no es el caso. He explorado asimismo los comandos MS-DOS disponibles y ninguno me ofrece esta posibilidad.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crear directorio y fichero dentro del mismo

Publicado por LuisDa (10 intervenciones) el 05/06/2009 09:12:06
Veo que no se ve bien la cadena del path. Quise poner:

c:\ficheros\resultados\info\datos.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crear directorio y fichero dentro del mismo

Publicado por aquiles (16 intervenciones) el 05/06/2009 23:09:38
#include< windows.h >
#include< stdio.h >


/* create_path_file : */
void create_path_file ( char * dir, char * file ) {

char cmd[2048];
sprintf( cmd, "mkdir %s", dir );

if( !system( cmd ) )
{
printf( "directorio creado... " );
}

if( SetCurrentDirectory( dir ) ) //
{
FILE *f = fopen( file, "wb" );

if( f )
{
printf( "Archivo %s, creado... ", file );
fclose( f );
}
}
}

/* main : */
void main()
{
create_path_file( "c:\\temporal\\temporal1\\temporal2", "datos1.txt" );
create_path_file( "c:\\temporal\\temporal1\\temporal2", "datos2.txt" );
create_path_file( "c:\\temporal\\temporal1\\temporal2", "datos3.txt" );
create_path_file( "c:\\temporal\\temporal1\\temporal2", "datos4.txt" );
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crear directorio y fichero dentro del mismo

Publicado por LuisDa (10 intervenciones) el 14/06/2009 13:39:55
Gracias. Bueno, lo he cambiado un poco, porque necesitaba liberar las zonas de memoria empleadas para las cadenas de caracteres (en lugar de definir arrays estáticos, he empleado malloc, reservando dos zonas de 100 posiciones consecutivas, dando por supuesto que el path no va a ser muy largo). Lo tengo implementado de este modo:

void create_path_file (char * dir, char * file) {

FILE * fich;

// La reserva estática no nos interesa porque luego no pueden liberarse esas zonas de memoria hasta finalizar el programa.
// Reservamos de forma dinámica dos zonas de memoria de 100 posiciones cada una, una para cada cadena.

char * cmd = (char*)malloc(sizeof(char)*100); // cmd contiene el comando que creará el directorio
char * pfile = (char*)malloc(sizeof(char)*100); // pfile contiene el path donde se creará el fichero

sprintf(cmd, "mkdir %s", dir);
system(cmd);
sprintf(pfile, "%s\%s", dir, file);
fich = fopen(pfile,"w");
fprintf(fich, "Esto es una prueba ");
fprintf(fich, "para ver si ha ido todo bien");
fclose(fich);

// Finalmente liberamos las dos zonas de memoria para que puedan utilizarse para otros menesteres

free(cmd);
free(pfile);


}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crear directorio y fichero dentro del mismo

Publicado por aquiles (16 intervenciones) el 15/06/2009 02:13:32
static char cmd[2048]; // perdura hasta finalizar el programa.
char cmd[2048]; // se destruye al terminar el modulo o funcion,
no necesita un free(cmd), te daria un error.


// si usas malloc esto seria mejor.
#include< stdio.h >
#include< string.h >
#include< malloc.h >

...

const char * MKDIR = "mkdirx20"; // con un espacio - HEX(x20) = ASCII(32).
char * cmd = (char*)malloc( strlen( MKDIR ) + strlen(dir) + 1 ); // + 1 terminacion null.
char * pfile = (char*)malloc( strlen( file ) + 1 ); // + 1 terminacion null.

sprintf( cmd, "%s%s", MKDIR, dir );
sprintf( pfile, "%s", file );

free( cmd );
free( pfile );

// esto ajusta el ancho de las variables de acuerdo al ancho de los argumentos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar