gpt4 book ai didi

c++ - 如何在C++中从头到尾写入文件

转载 作者:行者123 更新时间:2023-12-01 14:57:14 25 4
gpt4 key购买 nike

我有一个函数可以即时计算所需的结果(最终结果是仅包含char的〜50MB文本文件),但是顺序相反。
为了显示:
我的函数将计算“5、4、3、2、1,...”,但是我需要将“1、2、3、4、5”写入文件。
我想将它从头到尾动态地写到输出文件中。
当前,我正在使用std::ofstream::binary缓冲,反转和写入文件,但是我需要减少相关的时间,更重要的是减少空间开销。
最有效的方法是什么?
谢谢。
编辑:输出大小是已知的。

最佳答案

我了解您这样的要求:

  • 以二进制形式写入数据(尽管您正在谈论文本文件)
  • 您想存储普通字符
  • 您知道预先要写的字符数
  • 然后在末尾写第一个元素,然后在其前写一个,依此类推。

  • 如果您确实不想使用缓冲区,那么必须使用 seekp。但是现在已经有一些提示:这将是一个非常缓慢的解决方案。
    反正怎么办?所以:
  • 首先打开文件进行输出并检查是否可以打开
  • 计算输出文件
  • 中最后一个字符的偏移位置
  • 寻求这个位置并写
  • 递减偏移量

  • 寻求和写作看起来像这样
    fileStream.seekp(offset--).put(testData[index]);
    由于我没有您的计算功能,因此创建了一些虚拟数据。您需要对此进行调整。
    请参见以下示例代码段:
    #include <iostream>
    #include <fstream>
    #include <array>
    #include <numeric>

    // The known size of test data
    constexpr size_t OutputSize = 50'000U;
    // Some simple test data
    static std::array<char, OutputSize> testData{};

    int main() {

    // You will calculate the data in a different part of your code
    // I jsut fill the array with some data
    std::iota(testData.begin(), testData.end(), 0);

    // Open the file and check, if it could be opened.
    if (std::ofstream fileStream{ "r:\\test.bin", std::ofstream::binary }; fileStream) {

    // Caculate position offset of last element
    size_t offset{ (OutputSize - 1)};

    // Calculate and write data
    for (size_t index{}; index < OutputSize; ++index) {

    // Your claculation here
    // . . .

    // Seek and write data
    fileStream.seekp(offset--).put(testData[index]);
    }
    }
    return 0;
    }
    再次。寻求非常缓慢。

    关于c++ - 如何在C++中从头到尾写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63085999/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com