c++文件读写

步骤1

包含头文件:
#include <fstream>

步骤2:创建流对象

包括:
(1)ofstream : 写文件
(2)ifstream : 读文件
(3)fsream : 读写文件

如:

ifstream fin;
ofstream fout;

步骤3:打开文件

打开文件 fin.open (“文件路径” ,打开方式)

打开方式包括:
1、ios::in 读文件
2、ios::out 写文件(直接用的话会丢丢弃已有数据,即隐含为trunc)
3、ios::binary 二进制方式
4、ios:app 追加写(要配合out使用,直接写的话会隐含用ios::out
5、ios::trunc 覆盖写(要配合out使用)
6、ios::out|ios::binary 二进制写

如:

fin.open("D://learning/test1.txt",ios::in);

步骤4:读写数据

步骤4-1:向流中写入数据,最后关闭流
fout.close();
步骤4-2:从流中读取数据

为了保持健壮性,读文件要有验证代码:

if(!fin.is_open())
{
    std::cerr<<"文件打开失败"
}
//或者
if(!fin)
 {
    std::cerr<<"文件打开失败";
}  
第一种读的方式(按元素直接读):
//申请读空间:
char buf[1024]={0}; //就是临时申请一个 1024大的读空间(又叫buffer),并且初始化为0。
while (fin >> buf)
{
     cout << buf << endl;//每一次的buf是空格或回车键(即白色字符)分开的元素
}

文件:
1 2 3
a b c
renanquan ren
读取结果:
1
2
3
a
b
c
renanquan
ren

第二种读的方式(使用getline按行读):

默认读取数据时,它会传递并忽略任何白色字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。

为了解决这个问题,可以使用一个叫做 getline 的 C++ 函数。此函数可读取整行白色字符,只看换行符,即不看,包括前导和嵌入的空格,并将其存储在字符串对象中。

getline:
getline()函数是istream类中的一个成员函数,所以在使用它时,速妖使用istream的对象cin来调用它。getline (char* s, streamsize n ),作用是从istream中读取至多n个字符保存在s对应的数组中。即使还没读够n个字符,如果遇到换行符’\n’则读取终止

char buf[1021]={0};
while(fin.getline(buf,sizeof(buf)))
{
    std::cout<<buf<<std::endl;
} 

文件:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
renanquan ren an quan
读取结果:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
renanquan ren an quan

第三种读的方式(get):
char c;
while ((c = fin.get()) != EOF)
{
   std::cout << c;
} 

文件:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
renanquan ren an quan
读取结果:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
renanquan ren an quan

第四种读的方式:

若已知文件里头数据的顺序,则直接定义字符变量存储单个元素,以白色字符为分割

char a,s1,s2,s3,s4,s5;
string s6;
fin >> a >> s1 >> s2 >> s3>>s4>>s5>>s6;
cout<<a<<" "<<s1<<" "<<s2<<" "<<s3<<" "<<s4<<" "<<s5<<" "<<s6;

文件:
1 2 3
a b c
112
geya
读取结果:
1 2 3 a b c 112

over~

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值