• 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

  • 相关阅读:
    Cheatsheet: 2011 09.07 ~ 09.12
    Cheatsheet: 2011 10.01 ~ 10.10
    Cheatsheet: 2011 10.11 ~ 10.17
    Cheatsheet: 2011 09.01 ~ 09.06
    Cheatsheet: 2011 09.20 ~ 09.25
    Cheatsheet: 2011 08.17 ~ 08.22
    Cheatsheet: 2011 09.13 ~ 09.19
    Cheatsheet: 2011 08.08 ~ 08.16
    Cheatsheet: 2011 09.26 ~ 09.30
    Java05文件与流——课堂测试1
  • 原文地址:https://www.cnblogs.com/Brickert/p/15983429.html
Copyright © 2020-2023  润新知