ofstream ifstream记录
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间。
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。
fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream)
ifstream默认以输入方式打开文件
ofstream默认以输出方式打开文件
fstream默认以输入/输出方式打开文件
打开文件的方式在类ios(是所有流式I/O类的基类)中定义.
常用的值如下:
ios::app: 以追加的方式打开文件
ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in: 文件以输入方式打开(文件数据输入到内存)
ios::out: 文件以输出方式打开(内存数据输出到文件)
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc: 如果文件存在,把文件长度设为0
可以用“或”把以上属性连接起来,如ios::out|ios::binary
使用:
读取文件:
#include <fstream> using namespace std; ifstream is(m_file_dir, ios::binary); is.seekg(0, is.end); int length = is.tellg(); is.seekg(0, is.beg); char * buffer = new char[length]; is.read(buffer, length); str_data = buffer; delete[] buffer; is.close();
输出到文件:
#include <fstream> using namespace std; ofstream out(m_file_dir, ios::app | ios::binary); out << str_data; out.close();
使用过程中遇到的问题:
windows下,ofstream使用 ios::app 输出 \n(即 0A)字符时,会自动替换成 \r\n(即 0D0A),会导致多出 \r 符号。
解决办法:
打开模式加上 ios::binary
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探