C/C++ 读取文件 问题
C/C++ 读取文件 问题
1.peek()说明
- 判断文件是否为空时使用peek函数,若peek返回EOF则文件为空。例如:while(ifstream.peek() != EOF)
- 读取文件过程中,读取非char型时,使用peek()判断文件尾将不再适用,循环判断条件应**改用>>**操作符进行读取,若读入char型缓冲 区,peek()函数会表现得很好。
- peek()返回输入流文件的下一个字符,但它不移动内置指针。
2. feof()说明
解释1:feof()并不是返回当前的位置在不在文本末尾,而是返回当前位置后方还有没有内容。而在文本末尾系统会添加一个EOF标志来表示文本结束,所以当到EOF前时,明明应该停止读取,但因为当前位置后方还有内容(EOF也算内容),所以feof()并不是马上返回非零值,而是下一次才返回非零值,这也就导致最后一次的结果会被打印两次。
总结:
- 不能用feof()判断文本文件读取是否达到文本末尾,用fread或fgets代替。
- 二进制文件不能用EOF来判断是否到文件末尾,因为即使不在末尾也可能出现EOF的值(不同系统下EOF的值有别),只适用于文本文件。
- fread()对二进制文件和文本文件均适用
- 文本读写模式要记清。w+表示以文本模式打开文件(没有会创建),可以读出也可以写入。但是重复打开原有内容会被清空。