Autor
|
Tema: Agregar datos a mensajes de error en archivos con lenguaje C. (Leído 2,634 veces)
|
NOB2014
Desconectado
Mensajes: 366
|
Hola, que tengan un muy buen día. Lo que no puedo encontrar es información de porque ocurren los errores en archivos, quisiera informar al operario que pasó si por Ej. no se pudo abrir un archivo, o si no se pudo crear el archivo .bak, desconozco si esto es privativo del sistema operativo o si tiene que ver con el lenguaje. - También me interesaría completar el mensaje con que hacer para que esto no ocurra nuevamente. - Deje el programa(sin terminar) por si les ayuda en algo para entender mi pedido. - #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 80 void ingresarFrase( char frase[] ); void copiar( char frase[] ); void mostrar( void ); void errorEscritura( void ); void copiaDeSeguridad( const char *GtTxt, const char *GtBak ); void mensaje( int par ); int main( void ){ char frase[MAX]; ingresarFrase( frase ); copiar( frase ); mostrar( ); copiaDeSeguridad( "archGuiaTel.txt","archGuiaTel.bak" ); return EXIT_SUCCESS; } void ingresarFrase( char frase[] ){ int ok=0; do{ printf( "\n Ingrese frase.....:" ); fgets( frase , MAX , stdin ); }while( ok <= 1 ); } void copiar( char frase[] ){ FILE *ptrGtTxt; int par; if( !(ptrGtTxt = fopen( "archGuiaTel.txt", "a+" ))){ par = 1; mensaje( par ); } par = 2; mensaje( par ); errorEscritura( ); } par = 3; mensaje( par ); } } void mostrar( void ){ FILE *ptrGtTxt; char texto[100]; int par; if( !(ptrGtTxt = fopen( "archGuiaTel.txt", "r" ))){ par = 4; mensaje( par ); } printf( "\n ========== Contenido del archivo ==========\n" ); fgets( texto , 100, ptrGtTxt ); while( feof(ptrGtTxt ) == 0 ){ fgets(texto , 100, ptrGtTxt ); } par = 5; mensaje( par ); } } void errorEscritura( void ){ int par; if(remove( "archGuiaTel.txt" ) !=0 ){ par = 6; mensaje( par ); } if( rename( "archGuiaTel.bak","archGuiaTel.txt") !=0 ){ par = 7; mensaje( par ); } } void copiaDeSeguridad( const char *GtTxt, const char *GtBak ){ FILE *ptrGtTxt, *ptrGtBak; char c, x; int par; if( !( ptrGtTxt = fopen( GtTxt , "r" ))){ par = 8; mensaje( par ); } if( !( ptrGtBak = fopen( GtBak , "w" ))){ par = 9; mensaje( par ); } while ( c != EOF ){ x = fputc( c , ptrGtBak ); if (x != c){ par = 10; mensaje( par ); } } par = 11; mensaje( par ); } par = 12; mensaje( par ); } } void mensaje( int par ){ int ch, a; if( par == 1 ){ printf( "\n No se pudo ABRIR el archivo, la frase no se pudo copiar" ); printf( "\n El programa se cerrara sin cambios..." ); } if( par == 2 ){ printf( "\n No se pudo ESCRIBIR en el archivo..." ); } if( par == 3 ){ printf( "\n ===> No se pudo CERRAR el archivo..." ); } if( par == 4 ){ printf( "\n No se pudo ABRIR el archivo..." ); } if( par == 5 ){ printf( "\n No se pudo CERRAR el archivo..." ); } if( par == 6 ){ printf( "\n No se pudo BORRAR el archivo..." ); } if( par == 7 ){ printf( "\n No se pudo RENOMBRAR el archivo..." ); } if( par == 8 ){ printf( "\n No se pudo ABRIR el archivo(.txt)..." ); } if( par == 9 ){ printf( "\n No se pudo ABRIR el archivo(.bak)..." ); } if( par == 10 ){ printf( "\n No se pudo EFECTUAR la copia de seguridad..." ); } if( par == 11 ){ printf( "\n No se pudo CERRAR el archivo(.txt)..." ); } if( par == 12 ){ printf( "\n No se pudo CERRAR el archivo(.bak)..." ); } if( a != '\n') while ((ch = getchar()) != EOF && ch != '\n'); }
Saludos.
|
|
|
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.-
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
C provée un mecanismo para el control de errores. Como sabes las funciones devuelven información con de lo que han hecho o un código de error si no han conseguido realizar un trabajo. Además hay una variable local llamada errno que indica el último fallo ocurrido y por eso siempre debes comprobarla después de llamar a la función que te interesa controlar. Hay diferentes funciones para ello. Te recomiendo seguir el siguiente artículo: https://www.tutorialspoint.com/cprogramming/c_error_handling.htm
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola, MAFUS. Hice este pequeño código para entender un poco mejor el asunto y la pregunta que me surge es, puedo capturar el error antes de imprimirlo y traducirlo al español? . - entrada.txt: No such file or directory #include <stdio.h> #include <errno.h> #include <stdlib.h> #define NOMBRE_ARCHIVO "entrada.txt" int main( int argc,char **argv ){ FILE *entrada; if ( (entrada = fopen(NOMBRE_ARCHIVO , "rt")) == NULL ){ } return EXIT_SUCCESS; }
Saludos.
|
|
|
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.-
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
No, deberías, oara eso, montarte tu propia función de tratamiento de errores según errno.
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola, ¿cómo están? MAFUS estoy haciendo lo que me sugeriste, ahora me encuentro con que no logro forzar que fflush falle, si abro el archivo para solo lectura errno me da el error 9 (Bad file descriptor) esto ya lo tengo pero lo que quiero es producir el error cerrando el archivo antes de escribir con fflush pero lo que hace es no escribir en el archivo pero no me muestra ningún error, alguien me podria decir como debo hacer. - void copiar( char frase[] ){ FILE *ptrGtTxt; char funcionError[20]; if( !(ptrGtTxt = fopen( N_A_TXT , "a+" ))){ strcpy( funcionError , "copiarFopen" ); mensaje( funcionError ); } strcpy( funcionError , "copiarFflush" ); mensaje( funcionError ); errorEscritura( ); } mensaje( funcionError ); } }
void mensaje( char funcionError[] ){ int ch, a, errnum;; errnum = errno; limpiar(); if( strcmp( funcionError ,"copiarFopen") == 0 ){ printf("\n Error al abrir el archivo \"%s\" \n El fichero o directorio no existe...", N_A_TXT ); } if( strcmp( funcionError ,"copiarFflush") == 0 ){ printf("\n Error al abrir el archivo \"%s\" \n El fichero o directorio no existe...", N_A_TXT ); } printf( "\n\n\t Pulse <Enter> para finalizar..."); a = getchar(); if( a != '\n') while ((ch = getchar()) != EOF && ch != '\n'); }
Saludos.
|
|
|
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.-
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
apache como configurar todos los mensajes de error tipo Error 404
Desarrollo Web
|
kinos
|
1
|
4,900
|
3 Noviembre 2010, 00:15 am
por rockalyrics
|
|
|
Unir archivos y agregar el nombre de archivos a cada linea por MS-DOS
Scripting
|
cialem
|
4
|
6,189
|
18 Julio 2012, 16:13 pm
por cialem
|
|
|
Ayuda: ¿Como agregar mi lenguaje de programacion a NetBeans?
Software
|
S@l0o
|
0
|
1,104
|
30 Abril 2014, 18:41 pm
por S@l0o
|
|
|
Error al guardar muchos datos en arrays multidimensional (lenguaje C)
Programación C/C++
|
alejandrodiaz
|
7
|
2,694
|
30 Julio 2015, 20:56 pm
por joecarl
|
|
|
Agregar nodo a lista doblemente enlazada (lenguaje C)
Programación C/C++
|
NOB2014
|
7
|
6,503
|
3 Agosto 2016, 16:14 pm
por AlbertoBSD
|
|