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

 

posted @   Brickert  Views(55)  Comments(0Edit  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示