在C++中将大型文本文件读入内存

3

有没有一种方法可以一次性将大文本文件(约60MB)读入内存中(例如编译器标志来增加程序内存限制)?目前,ofstream的open函数在尝试读取此文件时会抛出分段错误。

ifstream fis;
fis.open("my_large_file.txt"); // Segfaults here

文件只是由形式为行的行组成。
number_1<tabspace>number_2

即两个由制表符分隔的数字。

7
60MB不算是一个很大的文件;-) - Yacoby
当涉及到I/O时,它有点依赖于操作系统,有时绕过C++函数并直接访问操作系统API函数以读取文件会更有效。 - AndersK
什么编译器?.open甚至不读取数据,所以这对你机器上的任何文件都有效吗?你确定它在.open调用时会出现段错误吗?接下来你要怎么处理fis? - Joe
我在使用g++。小型文本文件(~100K)可以成功地使用此调用打开;我已经使用gdb确定它确实在此调用上发生了段错误...我需要使用fis将文件数据加载到STL-map中。 - NoneType
1个回答

5

你可能存在其他问题,因为仅仅调用open并不能读取文件。我的猜测是该文件不存在(或者不在你认为的相对路径中)。


1
我同意你的“其他一些问题”的评论,但这两个都不应该导致SEGV。 - paxdiablo
路径是有效的,因为它暂停约20秒尝试打开文件,然后抛出 segfault。我能够使用这个调用打开同一目录中的较小文件。 - NoneType
实际上,如果它抛出未处理的异常,它可能会导致segv:"根据设置异常的值,可能会抛出异常"。而且因为它等待20秒,我猜测它正在尝试浏览网络以某种方式(网络映射驱动器?)。 - Blindy
4
如果这是一个UNIX系统,那么这20秒钟的时间可能部分用于写入核心文件。 - paxdiablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接