En el software de mi tengo que leer varias txt bases de datos en serie de una manera, por lo que he leído la primera, entonces tengo que hacer algo con la información que obtuve de ese archivo, que puedo abrir otro para escribir y así sucesivamente.

A veces tengo un error en la apertura O creación de un archivo, y luego me de errores en todos los siguientes apertura/creación, que utiliza diferentes funciones, diferentes variables, diferentes archivos.

Así, por ejemplo, puedo llamar a la siguiente función, que utiliza dos archivos, y tengo un error «* error al abrir el archivo %s- ..\n», entonces todas las otras fopen() en mi código va mal!

Este es un ejemplo de código para un único archivo:

FILE *filea;
if((filea=fopen(databaseTmp, "rb"))==NULL) {
    printf("* error while opening file -%s- ..\n",databaseTmp);
    fclose (filea);
    printf("---------- createDatabaseBackup ----------\n");
    return -1;
}
int emptyFolder=1;
FILE *fileb;
if((fileb=fopen(databaseBackup, "ab"))==NULL) {
    printf("* error while opening file -%s- ..\n",databaseBackup);
    fclose (fileb);
    printf("---------- createDatabaseBackup ----------\n");
    return -1;
}
else {
    int i=0;
    char c[500]="";
    for (i=0;fgets(c,500,filea);i++) {
        fprintf(fileb,"%s",c);
        emptyFolder=0;
    }
} 
fclose(fileb);
fclose(filea);
Uso perror para averiguar qué causó el error.

OriginalEl autor phcaze | 2012-05-19

3 Comentarios

  1. 9
    1. Hay un límite superior en el número de manijas para un proceso determinado. Puede ser que usted tiene una pérdida de identificador en su programa ?

    2. Error al crear un archivo normalmente significa que usted no tiene permiso de acceso a la carpeta padre .

    3. Los mensajes del registro de errores pertenecen a su programa . Usted puede mejorar más. Hay un errnum establecidos por el sistema operativo como fopen es esencialmente un sistema de llamada. Usted puede imprimir ese número de error y obtener más información acerca de su problema.

    Como sugiere larsmans, utilizando perror tengo «demasiados archivos abiertos». Así que creo que el problema es su punto 1. Mi programa continúa ciclo, por lo que si se me olvidó cerrar un archivo, después de algunos iteractions, podría alcanzar el límite. Cuántos archivos se puede abrir de forma simultánea?
    Podría ser un problema de no cerrar una carpeta? closedir()?

    OriginalEl autor Jay D

  2. 3

    Si fopen devuelve NULL, el archivo no estaba abierto, así que no hay ningún punto en el intento de fclose.

    OriginalEl autor MRAB

  3. 0

    Usted debe verificar el valor de retorno de fgets además si es 0 o no. Si lee los 500 caracteres y el buffer no está terminada en null, la fprintf va a intentar escribir más caracteres de los que se asigna para c

    OriginalEl autor Attila

Dejar respuesta

Please enter your comment!
Please enter your name here