1.文本文件
(1)写文件
程序运行时产生的数据都属于临时数据,程序一旦结束就会被释放
通过文件可以将数据持久化
C++中对文件操作需要包含头文件<fstream>
文件类型分为两种:
文本文件:文件以文本的ASCII码形式存储在计算机中
二进制文件:文件以文本的二进制形式存储在计算机中,用户读不懂
操作文件的三大类:(C++中的标准类)
ofstream:写操作 //以此类生成的文件对象只能写
ifstream:读操作 //以此类生成的文件对象只能读取
fstream:读写操作 //以此类生成的文件对象既可以写也可以读取
写文件的步骤:
包含头文件 #include <fstream>
创建流对象 oftream ofs;
打开文件 ofs.open(”文件路径”,打开方式);(文件名字.后缀扩展名)
写数据 ofs << “写入的数据”;
关闭文件 ofs.close();
文件打开方式:
打开方式 | 解释 |
ios::in ** | 为读文件而打开文件 |
ios::out ** | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注意:
文件打开方式可以配合使用,利用 | 操作符
例如:用二进制方式写文件 ios::binary | ios::out
生成新文件的话,没有指定文件的路径,会与程序保存在一个文件夹目录中
(2)读文件
包含头文件 #include <fstream>
创建流对象 iftream ifs;
打开文件并判断是否打开成功
ifs.open(”文件路径”,打开方式);(文件夹名字.后缀扩展名)
读取数据 四种方式读取
关闭文件 ofs.close();
四种读取方式
第一种
char buf[1024] = {0};
while (ifs >> buf)
{
cout << buf << endl;
}
第二种
char buf[1024] = {0};
while(ifs.getline(buf,sizeof(buf)))
{cout << buf << endl;
}
第三种
string buf;
while(getline(ifs,buf))
{cout << buf << endl;}
第四种
char c;
while( (c = ifs.get() != EOF)) //EOF是end of file,文件尾部
{cout << c ;}
利用is_open函数判断文件是否打开成功
2.二进制文件
(1)写文件
以二进制方式对文件进行读写操作
打开方式指定为ios::binary
二进制方式写文件主要利用流对象调用成员函数write
函数原型
ostream& write( const char * buffer ,int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
Person p = {"张三",18};
ofs.write((const char*)&p,sizeof(Person)); //把p强制转换成char*类型
(2)读文件
二进制方式读文件主要利用流对象调用成员函数read
函数原型
istream& read( const char * buffer ,int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
Person p = {"张三",18};
ifs.write((char*)&p,sizeof(Person));
标签:文件,ifs,二进制,ios,char,操作,buf
From: https://blog.csdn.net/weixin_62492456/article/details/140264610