头文件:#include<fstream>
1.打开文件:
访问前要先定义成一个文件流类的对象
ifstream fin;
或者ofstream fout
或者fstream ff
(对象名可由自己定义)
并用该对象打开它
ff.open("D://test.txt",ios::in||ios::out||ios::binary);
fin.open("D://test.txt")//ifstream和fstream不会新建空文件,只能打开已有文件
fout.open("D://test.txt")//ofstream打开的文件如果不存在则自动新建空文件
注意:可以用构造函数打开文件
ofstream fout("c:\\1.txt");
与下面的写法是等价的
ofstream fout;
fout.open("c:\\1.txt");
文件打开方式:
2.判断文件是否成功打开:
ifstream fin;
fin.open("文件路径及文件名");
if(!fin) //或 if(fin.fail( )) if (fin.is_open() == 0)
{
//可自定义语句
cerr<<"文件打开失败"<<endl;
exit(1);
//exit用于在程序运行时结束程序,0表示正常结束,非0表示异常退出,类似return的作用
}
……(后续文件操作语句);
3.关闭文件:
流对象名.close();
如:fin.close();
fout.close();
4.内容访问:
文本文件读写:
方法一:
char ch;
fin>>ch;//读取文件
fout<<ch;//写入文件
//注意:>>运算忽略空格、tab和回车
方法二:
char ch;
fin.get(ch);//读取文件
fin.put(ch);//写入文件
//get运算把空格、tab和回车当成字符来处理
方法三:
char ch;
fin.read(&ch, sizeof(ch));
cout.write(&ch,sizeof(ch);//cout.write(&x, fin.gcount());
//gcount函数用于获取上一个read函数实际读取的字节数。
• eof()函数:当文件上一次读操作未读到EOF时返回0,已读到EOF时返回-1。
注意:while语句中使用eof()函数读取长度为n的文件,读到第n号地址的EOF后的eof()判断才会返回真,此时已读取了n+1个字符。
• 使用fin.peek() != EOF 取代!eof()。
fin.peek()表示文件指针当前指向的字符
如:
char x;
while(fin.peek() != EOF)//while(!eof())
{
fin.read(&x, sizeof(x));
cout.write(&x, sizeof(x));
}
•注意:当循环条件利用读到EOF时,get和read函数返回值为0,可以把get、read函数的返回值作为循环条件,此时需要逐个字符读,否则有可能会漏过EOF。例如:
char x;
while(fin.read(&x, sizeof(x)))
{
cout.write(&x, sizeof(x));
}或
char x;
while(fin.get(x))
{
cout.put(x);
}
4.判断空文件:
if (fin.peek() == EOF)
{
cout << "文件是空的"<< endl;
}
文本文件读写小结:
• 为避免丢失空格、tab、回车等数据,按字符读文件时不要使用 >>, 用get(x)或read(&x,sizeof(x)),其中x是char型。
• 写文件用 <<、put、write皆可。
• 小心地使用eof函数和peek函数,gcount方法可以用来返回上一次实际读到的字符数量