relacionadas: fclose return value check¿Debo verificar el estado de devolución de fclose() si solo estoy leyendo un archivo?
Aunque es importante comprobar el valor de retorno de fclose()
si usted está escribiendo un archivo (en caso de que falle la operación de vaciado), es necesario que lo haga cuando leer un archivo?
FILE *f = fopen(path, "r");
if (f == NULL)
return 0;
/* Do something with the file... */
if (fclose(f) != 0) {
/* Error closing a file we successfully read. */
return 0;
}
Depende de la importancia de los datos que se supone que debe leer. Si falla 'fclose()', es probable que haya un problema durante la lectura también, tal vez porque algo se pisoteó sobre la estructura del flujo de archivos. En ese caso, es posible que no haya leído todos los datos que se suponía que debía y generar una respuesta basada en parte de los datos podría ser un problema. ¿Mucha gente escribe el código para hacer ese control? No; mucha gente no verifica que el cierre tenga éxito. Sin embargo, eso podría deberse a que los datos que se procesan no son críticos. –
@Jonathan, si fread no devuelve errores, ¿por qué asumiría que hubo un error solo por una falla en una llamada al sistema diferente? No puedo imaginarme por qué un archivo abierto para lectura no se cierra, pero si sucede, no creo que pueda suponer que una llamada anterior que no devolvió un error haya fallado. No tiene mucho sentido para mí. – littleadv
@littleadv: ¿Marcó usando 'feof (fp)' versus 'ferror (fp)' si la lectura falló o llegó a EOF? Normalmente no hago eso; No creo que sea una minoría tampoco. Tienes razón; si todas las lecturas anteriores tuvieron éxito y usted confirmó que obtuvo EOF y no un error en la lectura final, entonces es bastante improbable que '' fclose() 'falle. Podría suceder, pero no es probable. Y mencioné las razones más probables para que 'fclose()' fallara, concretamente, el pisoteo de la memoria en alguna forma o forma, o una mala administración del puntero al archivo (sin cerrar el archivo que en realidad tenía abierto). Definitivamente poco probable. –