c++ - 同时文件流是否有限制?

标签 c++ fstream

我对同时打开的 fstream 的使用有一个战略问题。 我必须编写一个读取大量文件的程序。在每个文件中都有一堆标识符的信息,但只有一次。我必须计算此信息,然后将其保存在单独文件中的每个标识符中。每个标识符出现在多个文件中,每次都应保存在同一个文件中(一个标识符多次)。 我希望有数百个标识符,所以我怀疑我是否应该同时打开数百个文件流。

那么同时文件流有限制吗? 或者您是否提出了另一种方法?

该程序将计算大量数据(大约 10GB 或更大)并且可能计算数小时。

谢谢

最佳答案

任何事物终究是有极限的。文件是操作系统管理的完美示例,您必须查阅操作系统文档以了解具体限制。在 Linux 中,我相信它在内核中是可配置的。可能还有用户和进程配额。

我认为 200 不会太多。

试试看很简单。只需编写一个程序,不断打开更多文件,直到出现错误。

实例。

在 Mac OS X 10.8 上,这个程序

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>

int main() {
    int i = 0;
    std::ofstream *f;
    do {
        f = new std::ofstream( std::to_string( i ++ ) );
    } while ( * f << "hello" << std::flush );
    -- i; // Don't count last iteration, which failed to open anything.

    std::cout << i << '\n';
}

产生输出 253。因此,如果您使用的是 Mac,那您就是黄金 :)。

关于c++ - 同时文件流是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473182/

相关文章:

c++ - 读取二进制整数后,fstream 是否移动到下一个位置(C++)

c++ - 在 C++ 中使用两个文件流处理异常

c++ - 关于检查数据是否存在的 C++ 程序崩溃

c++ - 从函数 C++ 返回 NULL 字符串

c++ - 为什么C++中的system()会出现E0413错误?

c++ - QMenuBar在Linux中不以窗体显示

c++ - 在 C++ 中将信息写入文件的函数

c++ - 将整数发送到 fstream 作为 little endian

c++ - 两个运算符(operator)的一些奇怪冲突<<

c++ - 可变仿函数是否仍然是 "valid"被使用