Gestión de errores en C ++ al abrir un archivo

Al abrir un archivo, todo tipo de cosas pueden salir mal. Un archivo vive en un dispositivo físico - un disco fijo, por ejemplo, o tal vez en una tarjeta de unidad de memoria flash o SD - y usted puede tener problemas al trabajar con dispositivos físicos.

Por ejemplo, parte del disco puede estar dañado, causando un archivo existente se alteren. O menos desastroso, es posible que se quede sin espacio en disco. O incluso menos desastrosa, puede intentar abrir un archivo en un directorio que no existe.

Si intenta abrir un archivo para escritura especificando una ruta completa y el nombre pero el directorio no existe, el equipo responde de manera diferente, dependiendo del sistema operativo que esté utilizando. Si no estás seguro de cómo su sistema operativo en particular va a responder, trate de escribir una aplicación de prueba sencilla que trata de crear y algo abierto como /abc/def/ghi/jkl/abc.txt. (Por supuesto, usted quiere estar seguro de utilizar un directorio que no existe.)

Entonces una de dos cosas va a suceder: o el directorio y el archivo será creado, o nada va a suceder.

Por ejemplo, en un sistema Windows, si tratamos de crear un archivo en un directorio que no existe, el sistema no crea el directorio. Eso es porque en el fondo, la aplicación llama en última instancia una función del sistema operativo que hace el trabajo sucio de crear el archivo. Y esta función del sistema operativo en particular (se llama CreateFile (), si incluso el cuidado) tiene una regla que no creará un directorio para usted.

Si desea determinar si la ostream clase no ha podido crear un archivo, puede llamar a su fallar () función miembro. Esta función devuelve cierto si el objeto no se pudo crear el archivo. Y eso es lo que sucede cuando un directorio no existe. los DirectoryCheck01 ejemplo mostrado demuestra un ejemplo de esto.

#include #include using namespace main () {archivosalida ofstream-std int ("/ abc / def / ghi / MyFile.txt") - si (outfile.fail ()) {cout lt; lt; "No se pudo abrir el archivo!" lt; lt; endl retorno 0-} archivosalida lt; lt; "Hola" lt; lt; endl-outfile.close () - retorno 0-}

Cuando se ejecuta este código, en el supuesto de que usted no tiene un directorio llamado / abc / def / ghi en su sistema, debería ver el mensaje No se pudo abrir el archivo! Suponiendo que su sistema operativo particular, no crea un directorio en este caso- si lo hace, el equipo abrirá el archivo, escribir Hola a ella, y seguir adelante con su vida feliz después de cerrar las cosas.

Como una alternativa a llamar a la fallar () función miembro, puede utilizar un operador disponible en varias clases de flujo. Esto es!, Cariñosamente conocido como el " Bang " operador, y usted lo utilizaría en lugar de llamar a fallar (), como en este código:

if (! archivosalida) {cout lt; lt; "No se pudo abrir el archivo!" lt; lt; endl retorno 0-}

La mayoría de la gente prefiere utilizar !archivosalida en lugar de outfile.fail (), a pesar de que !archivosalida hace código confuso. La razón es que archivosalida es un objeto, y la noción de !archivosalida simplemente no tiene sentido.

De hecho, !archivosalida excursiones a muchos programadores principiantes. Ellos saben que archivosalida no es un puntero en este código de ejemplo, y se preguntan cómo se puede probar contra 0 como normalmente sólo se puede hacer con un puntero. (Recuerde, diciendo !X, dónde X es cierto puntero, que está probando X contra 0.) Y eso simplemente no tiene sentido! Y así, para evitar confusiones, simplemente llame fallar (). Tiene más sentido.

Aquí hay algunas razones de su creación de archivos puede ahogarse:

  • El directorio no existe.

  • Estás fuera de espacio en disco y de suerte.

  • Su solicitud no tiene los permisos adecuados para crear un archivo.

  • El nombre del archivo no es válido - es decir, que contenía caracteres que el sistema operativo no permite un nombre de archivo, como * o?.

Como cualquier buena aplicación, la aplicación debe hacer dos cosas:

  1. 1.Compruebe si una creación de archivos logró.

  2. 2.Si la creación del archivo falló, manejarlo adecuadamente.

    No se limite a imprimir un mensaje tan horribles como ¡Huy! Abortar!, dejando a sus usuarios pobres sin remedio que tirar el monitor en el suelo. En su lugar, hacer algo más amigable - tales como la presentación de un mensaje diciéndoles que hay un problema y sugiriendo que podrían liberar más espacio en disco.




» » » » Gestión de errores en C ++ al abrir un archivo