2012-02-01 12 views
5

Al leer un archivo, entiendo que el último carácter proporcionado es un EOF. Ahora, ¿qué ocurre cuando tengo un carácter EOF en ese archivo?¿Cómo distingo entre un carácter EOF y el final real del archivo?

¿Cómo distingo entre el final "real" de un archivo y el carácter EOF?

+0

* No puede * tener un "carácter EOF" en el archivo. No existe tal cosa –

+0

en DOS, y todavía puede haber en Windows. Ctrl-Z, o valor ASCII 26. Una aplicación de este tipo que aún produce archivos con caracteres 'EOF' es un producto llamado WinQuery de The Analytical Group. – STLDeveloper

Respuesta

10

Decidí mover mis comentarios a una respuesta.

Usted no puede tener un "carácter EOF" en su archivo porque no existe tal cosa. El sistema de archivos subyacente sabe cuántos bytes hay en un archivo; no depende del contenido del archivo para saber dónde está el final.

Las funciones de C que está utilizando retorno EOF (-1) pero eso no ha sido leído desde el archivo. Es solo la forma en que la función te dice que has llegado al final. Y como -1 no es un personaje válido en ningún conjunto de caracteres, no hay confusión.

1

Suponiendo que está hablando de C, EOF es -1, que no es un carácter (por lo tanto, no hay confusión).

+0

Entonces, cuando pongo un caracter 'EOF' en un archivo, ¿no se registrará como final del archivo? – polemon

+2

Un 'char' es un byte (valor de 8 bits), mientras que EOF es un entero. No existe el carácter EOF y, por lo tanto, no puede poner uno en un archivo. – jdigital

4

Necesita un contexto para esta pregunta. En Windows, existe el concepto obsoleto de DOS de un verdadero "personaje EOF": Ctrl-Z. En realidad, no es posible distinguir uno "real" de uno "falso"; un archivo con una Ctrl-Z incrustada contendrá algunos datos ocultos finales desde la perspectiva de un programa que realmente está buscando Ctrl-Z como un carácter de fin de archivo. No intente escribir este tipo de código nunca más, no es necesario.

En la C API portátil y en UNIX, se utiliza un -1 de 32 bits para indicar el final del archivo, que no puede ser un carácter válido de 8 o 16 bits, por lo que es fácil diferenciarlo.

+0

Erm, vale, parece que confundí 'EOF' y' EOT', que pensé que era básicamente lo mismo. Ctrl + D a menudo se llama "fin del archivo". – polemon

Cuestiones relacionadas