c++文件操作

#include <iostream>
#include <fstream>
#include <string>
###----------------------------------------------------流式读写--------------------------------------------------------------
###-----------------流式写--------------------------------------------------------------
//    [//]: # (文件目录)
char* filename="/Users/PQL/Desktop/simon_util/test.txt";
//    [//]: # (创建对象)
ofstream fout;
//    [//]: # (打开文件,ios::app追加写入,ios::out覆盖写入)
//    [//]: # (文件不存在会自动创建文件)
fout.open(filename,ios::app);
//    [//]: # (判断文件是否打开,路径不存在会报错)
if(fout.is_open()== false){
    cout<<"打开"<<filename<<"文件失败";return 0;
}
//    [//]: # (写入文件)
int i=0;
while(i<100){
    fout<<"小杂毛:"<<i<<endl;
    i++;
}

//    [//]: # (关闭文件)
fout.close();

###-----------------流式读--------------------------------------------------------------
//    [//]: # (读取文件)
char *filename = "/Users/PQL/Desktop/simon_util/test.txt";

//    [//]: # (创建对象)
ifstream fin;

//    [//]: # (打开文件)
//    [//]: # (文件不存在会报错)
fin.open(filename, ios::in);
if (fin.is_open() == false) {
    cout << "打开文件" << filename << "失败";
    return 0;
}

//    [//]: # (读取数据第一种方式)
string buffer;
while (getline(fin, buffer)) {
    cout << buffer << endl;
}
fin.close();
//    [//]: # (读取数据第二种方式)
char buffer1[101];
while (fin.getline(buffer1, 100)) {
    cout << buffer1 << endl;
}
fin.close();
//    [//]: # (缓冲区一行字节超过101,会数据丢失)
//
//    [//]: # (读取数据第三种方式)
string buffer3;
while (fin >> buffer3) {
    cout << buffer3 << endl;
}

//    [//]: # (这种方式读出来的数据遇到空格就换行没有换行)
fin.close();

###----------------------------------------------------二进制读写--------------------------------------------------------------

###-----------------二进制写--------------------------------------------------------------
//    [//]: # (二进制格式读写文件)
//    [//]: # (写入数据)
char* filename="/Users/PQL/Desktop/simon_util/test.dat";
//    [//]: # (创建对象)
ofstream fout;

//    [//]: # (打开文件)
fout.open(filename,ios::app|ios::binary);
if(fout.is_open()==false){
cout<<"打开文件"<<filename<<"失败";return 0;
}
struct st_gril{
char name[31];
int  no;
char memo[301];
double weight;
}girl;
girl={"西施",3,"中国第一美女",48.5};
fout.write((const char*)&girl,sizeof(st_gril));
//    [//]: # (使用write()函数)
//    [//]: # (需要将结构体转为字符格式)
girl={"貂蝉",2,"中国第二美女",50};
fout.write((const char*)&girl,sizeof(st_gril));

[//]: (关闭文件)
fout.close();


###-----------------二进制读--------------------------------------------------------------
//    [//]: # (读取文件)
char *filename = "/Users/PQL/Desktop/simon_util/b.dat";

//    [//]: # (创建对象)
ifstream fin;
//    [//]: # (打开文件)
//    [//]: # (文件不存在会报错)
fin.open(filename, ios::in | ios::binary);
if (fin.is_open() == false) {
cout << "打开文件" << filename << "失败";
return 0;
}
//    [//]: # (读取二进制文件第一种方式)
struct st_gril {
    char name[31];
    int no;
    char memo[301];
    double weight;
} girl;

//  [//]: # (按结构 一块一块读取文件)
while (fin.read((char*)&girl, sizeof(st_gril))) {
    cout << "名字" << girl.name << "排名" << girl.no << "体重" << girl.weight<<endl;
}

//   [//]: # (关闭文件)
fin.close();

#---------------------文件指针--------------------------------------------------------------------
fin.tellp()获取当前指针位置
fin.tellg()同上

fin.seek(128)将指针移动到128
fin.seek(ios::beg)移动到初始位置
fin.seek(ios::end)移动到末尾位置
fin.seeg(30,ios::beg)开始位置后移动30
fin.seeg(-5,ios::cur)当前位置前移动5
fin.seeg(8,ios::cur)当前位置后移动8
fin.seeg(-10,ios::end)末尾位置前移动10

#--------------------文件缓冲区---------------------------------------------------------------------
工作原理:减少磁盘io次数
fout.flush()刷新缓冲区;
endl;换行并刷新缓冲区;
fout<<unitbuf;设置fout输出流,在每次操作后刷新缓冲区;
fout<<nounitbuf;设置fout输出流,回到缺省缓冲方式;
即时存入磁盘,停电啥的
#-------------------流状态判断--------------------------------------------
1.eofbit
当输入流操作到达文件末尾时,将设置eofbit
eof()成员函数检查流是否设置了eofbit
2.badbit
无法诊断的失败破环流时,将设置badbit(对输入流进行写入;磁盘没有空间了)
bad()检查流是否设置了badbit
3.failbit
当输入流操作未能读取到预期字符时,将设置faibit(非致命,一般软件错误)
文件到末尾了,i/o失败也可能设置faibit
4.clear()清理流状态
5.setstate()重置流状态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值