C++,文件读取操作get()与read()在以下程序中有什么区别
程序一[code=C/C++][/code]
#include <iostream>
#include <fstream.h>
const char * filename = "example.txt";
int main ()
{
int i;
long size;
fstream File;
File.open(filename,ios::out | ios::in | ios::binary | ios::ate);
size = File.tellg();
if (!File.is_open()) //如果文件没有打开,它将返回0(false);如果文件已经打开,它将返回1 (true)
{
cerr << "文件打开失败!" << endl;
exit(0);
}
char * buffer;
cout << size << endl ;
File.seekg (0, ios::beg);
buffer = new char [size];
File.read (buffer, size);
for (i = 0 ; i < size ; i ++)
{
cout << buffer[i];
}
cout << endl;
cout << "the complete file is in a buffer" << endl << endl;
File.seekg(ios::beg);
char ch ;
int j = 0 ;
while (!File.eof())
{
File.get(ch);
cout << ch;
j ++ ;
}
cout << endl;
delete[] buffer;
File.close();
}
程序二[code=C/C++][/code]
#include <iostream>
#include <fstream.h>
const char * filename = "example.txt";
int main ()
{
int i;
long size;
fstream File;
File.open(filename,ios::out | ios::in | ios::binary | ios::ate);
size = File.tellg();
if (!File.is_open()) //如果文件没有打开,它将返回0(false);如果文件已经打开,它将返回1 (true)
{
cerr << "文件打开失败!" << endl;
exit(0);
}
cout << size << endl ;
char * buffer;
File.seekg(ios::beg);
char ch ;
int j = 0 ;
while (!File.eof())
{
File.get(ch);
cout << ch;
j ++ ;
}
cout << endl;
File.seekg (0, ios::beg);
buffer = new char [size];
File.read (buffer, size);
for (i = 0 ; i < size ; i ++)
{
cout << buffer[i];
}
cout << endl;
cout << "the complete file is in a buffer" << endl << endl;
delete[] buffer;
File.close();
}
这俩个程序只是把read()与get()函数的位置换了下,为什么程序二,read()函数不能正确执行呢?
谢谢,高手指点。。。。
[解决办法]
在程序2中插入代码试一下
- C/C++ code
File.clear() // the added lineFile.seekg (0, ios::beg);buffer = new char [size];File.read (buffer, size);
[解决办法]
原因分析:第2段代码为什么不可以的原因是:
while (!File.eof())
{
File.get(ch);
cout << ch;
j ++ ;
}
第一次读取使得文件到达了末尾
此时会记录下一个错误状态eofbit(已经发现EOF)
然后调用File.seekg (0, ios::beg);的时候,由于这个错误状态文件不会进行移动
解决办法:
在File.seekg (0, ios::beg);语句前加上
File.clear(); 把错误状态清除就可以了。