Autor
|
Tema: Duplicar un archivo de texto plano con lenguaje C. (Leído 3,241 veces)
|
DanielPy
Desconectado
Mensajes: 145
|
Hola gente. La lógica es que consultemos cuando un programa no funciona por algún error de sintaxis o lógica, en este caso es algo distinto porque como algunos conocen por mi edad no tengo otra posibilidad de consulta que no sean los foros.- El caso es, alguien me puede decir si esta es una manera correcta de duplicar un archivo, me refiero a fgets y fputs, con estas 2 funciones tengo la seguridad de que no voy a tener problema para leer y escribir contenga lo que contenga un archivo con texto plano ?.- /* Programa para copiar un archivo en otro*/ #include <stdio.h> int main(){ char temp[100]; FILE *ptrOrigen = fopen( "cliente.txt", "r"); FILE *ptrCopia = fopen( "clienteCopia", "w"); if( ptrOrigen == NULL || ptrCopia == NULL ){ printf(" \n\n Error al abrir ficheros... "); } else{ printf( "\n Se muestra el archivo copiado...\n\n" ); while( fgets( temp , 100, ptrOrigen ) ){ } } return 0; }
Desde ya muchas gracias por la ayuda que deseen brindarme.- Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
engel lex
|
cual error te da?
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
alguien me puede decir si esta es una manera correcta de duplicar un archivo El programa debe funcionar correctamente, solo un detalle: si alguna de las aperturas de archivo falla terminaras llamando a la función fclose con su argumento igual a NULL y eso no lo define el lenguaje (comportamiento no definido). Para solucionarlo antes de llamar a fclose verifica el valor de su argumento mediante una sentencia condicional: if (ptrOrigen != NULL) if (ptrCopia != NULL)
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
Hola. angel lex, no te respondí porque me pareció que estaba muy claro cuál era mi consulta.- rir3760, te dejo un programita que arme con datos obtenidos en la web porque me pareció interesante para leer un archivo como el siguiente: campo1:2:campo3 campo4:5:campo6 #include <stdio.h> int main(void){ char campoUno[100], campoTres[100]; int campoDos = 0; FILE *ptrBdd = fopen("datos.txt", "r"); if( ptrBdd == NULL){ printf( "\n\n Error al intentar abrir archivo..." ); } else{ fscanf( ptrBdd , "%[a-z0-9]:%d:%[a-z0-9]\n", campoUno , &campoDos , campoTres ); printf( "%s %d %s\n", campoUno , campoDos , campoTres ); } } return 0; }
La consulta es. ¿es correcto poner el cierre del archivo dentro del else? ¿ o tengo que cerrarlo con el condicional if? Saludos. Daniel
|
|
« Última modificación: 4 Marzo 2015, 16:29 pm por DanielC# »
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
¿es correcto poner el cierre del archivo dentro del while()? ¿ o tengo que cerrarlo con el condicional if? El programa tal como esta funciona correctamente: A) Si la apertura del archivo falla no es necesario cerrarlo. B) Si la apertura del archivo es exitosa este se cierra después del bucle while. Un detalle es la especificación de rangos en la forma "a-z" ya que estos dependen del compilador utilizado, otro mas es la falta de validaciones mas el uso de feof para controlar el bucle. Para el caso es mejor: if ( ptrBdd == NULL) { }else { while (fscanf(ptrBdd , " %[^:]:%d:%s", campoUno , &campoDos , campoTres ) == 3) printf( "%s %d %s\n", campoUno , campoDos , campoTres ); }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
Hola a todos. rir3760 créeme que desde que pusiste tu último post y hasta este momento que son las 23.36 (Argentina) que estuve buscando casi sin cesar que significaba el == 3 que parece tener relación con el bucle while pero no logro encontrar la explicación, ni siquiera el archivo tiene 3 renglones de 3 campo cada uno (tiene 2), ¿me lo podrías aclarar ?.- Saludos y gracias por tú tiempo. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Las funciones fscanf, scanf y sscanf retornan el numero de conversiones realizadas con éxito. La condición del bucle: while (fscanf(ptrBdd , " %[^:]:%d:%s", campoUno , &campoDos , campoTres ) == 3) printf( "%s %d %s\n", campoUno , campoDos , campoTres );
Compara el resultado de fscanf con el valor tres porque este es el numero de conversiones que debe realizar la función al leer cada registro. En otras palabras "Mientras se lean con éxito los tres campos que componen un registro ellos se imprimen en la salida estándar". Si no tienes una referencia de la biblioteca estándar de C dos (en ingles) que puedes utilizar son: Plauger C90 ReferenceC Plus Plus: scanfUn saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
|