如何获取 std::ofstream 中缓冲区的大小?

问题描述 投票:0回答:1

缓冲区的默认大小通常为 8192 字节,但这取决于实现。如何从

std::ofstream
对象中获取当前缓冲区大小的实际值?

c++ stl ofstream
1个回答
0
投票

根据评论,getting尺寸对你来说并不是很有用。你真正想要做的是set大小。幸运的是,这实际上相当容易(需要注意的是,至少在理论上,它可能会失败)。

流有一个

rdbuf()
成员来检索(指向)其关联的
streambuf
对象,并且
streambuf
有一个
pubsetbuf
告诉它使用特定的内存块作为其缓冲区。

// mock of the object we want to write all or nothing
struct myObject {
    char data[256];

    friend std::ostream &operator<<(std::ostream &is, myObject &m) { 
       return os.write(m.data, sizeof(m.data));       
    }
};

// number of objects to buffer
const std::size_t N = 20;

int main() { 
    // storage space for the buffer:
    static char buffer[N * sizeof(myObject)+1];

    std::ofstream output("somefile.txt");   

    // tell the stream to use our buffer:
    output.rdbuf()->pubsetbuf(buffer, sizeof(buffer));

    myObject m("some data to be written");

    output << m;
}

你真的想在对流进行任何读取或写入之前设置缓冲区(否则,它必须在设置新缓冲区之前刷新现有缓冲区中的所有内容,这可能会导致写入部分对象)。

© www.soinside.com 2019 - 2024. All rights reserved.