【VCプログラミングテクニック】ファイル¯2.1 EOFの誤り
プログラミングの过程の中で、ファイルの操作は1つのよく使う问题で、EOFについての理解の多くの人は1つの误区が存在します:“EOF--”ファイルの终わり符"!EOFはEnd Of Fileの略である.C言語では標準ライブラリstdioです.hで定義されたマクロであって、ファイルの終端ではない.
MSDNは、EOF is returned by an I/O routine when the end-of-file(or in some cases,an error)is encountered、すなわち、EOFはI/O操作がプログラムの最後に遭遇したり、エラーが発生したりしたときに返されるフラグである.だからEOFはファイルに存在する内容ではなく、ファイルの終了符とは言えない.
I/O操作がEOFに戻ると、関数foef()でI/O操作がファイルの末尾に達したかどうかを判断し、関数ferror()でI/O操作が何の間違いなのかを判断できます.
MSDNの関数foef():
Return Value
The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return.
Parameter
stream
Pointer to FILE structure
Remarks
The feof routine (implemented both as a function and as a macro) determines whether the end ofstream has been reached. When end of file is reached, read operations return an end-of-file indicator until the stream is closed or untilrewind, fsetpos, fseek, or clearerr is called against it.
MSDNの関数ferror():
Return Value
If no error has occurred on stream, ferror returns 0. Otherwise, it returns a nonzero value.
Parameter
stream
Pointer to FILE structure
Remarks
The ferror routine (implemented both as a function and as a macro) tests for a reading or writing error on the file associated withstream. If an error has occurred, the error indicator for the stream remains set until the stream is closed or rewound, or untilclearerr is called against it.
/***
*stdio.h - definitions/declarations for standard I/O routines
*
* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* This file defines the structures, values, macros, and functions
* used by the level 2 I/O ("standard I/O") routines.
* [ANSI/System V]
*
* [Public]
*
****/
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef _INC_STDIO
#define _INC_STDIO
...
#define EOF (-1)
...
MSDNは、EOF is returned by an I/O routine when the end-of-file(or in some cases,an error)is encountered、すなわち、EOFはI/O操作がプログラムの最後に遭遇したり、エラーが発生したりしたときに返されるフラグである.だからEOFはファイルに存在する内容ではなく、ファイルの終了符とは言えない.
I/O操作がEOFに戻ると、関数foef()でI/O操作がファイルの末尾に達したかどうかを判断し、関数ferror()でI/O操作が何の間違いなのかを判断できます.
MSDNの関数foef():
int feof( FILE *stream );
Return Value
The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return.
Parameter
stream
Pointer to FILE structure
Remarks
The feof routine (implemented both as a function and as a macro) determines whether the end ofstream has been reached. When end of file is reached, read operations return an end-of-file indicator until the stream is closed or untilrewind, fsetpos, fseek, or clearerr is called against it.
MSDNの関数ferror():
int ferror( FILE *stream );
Return Value
If no error has occurred on stream, ferror returns 0. Otherwise, it returns a nonzero value.
Parameter
stream
Pointer to FILE structure
Remarks
The ferror routine (implemented both as a function and as a macro) tests for a reading or writing error on the file associated withstream. If an error has occurred, the error indicator for the stream remains set until the stream is closed or rewound, or untilclearerr is called against it.