文本文件的打开,读写与关闭

23 篇文章 0 订阅

头文件:#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方法可以用来返回上一次实际读到的字符数量

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值