2010-05-22 4 views
2

Есть ли способ прочитать большой текстовый файл (~ 60 МБ) в память сразу (например, флаг компилятора для увеличения предела памяти программы)? В настоящее время функция openstream генерирует ошибку сегментации при попытке прочитать этот файл.Чтение большого текстового файла в память в C++

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

Файл просто состоит из строк вида

number_1<tabspace>number_2 

т.е. два числа, разделенные tabspace.

+7

60MB не большой файл ;-) – Yacoby

+0

Когда дело доходит до ввода-вывода, это зависит от операционной системы, иногда более эффективно обходить функции C++ и напрямую обращаться к функциям OS API для чтения файлов. –

+0

Какой компилятор? .open даже не считывает данные, так это работает для ЛЮБОГО файла на вашем компьютере? Вы уверены, что это связано с вызовом .open? Что вы делаете дальше с fis? – Joe

ответ

5

У вас есть еще одна проблема, потому что вы не , читаете файл, просто позвонив open. Я предполагаю, что файл не существует (или не существует в относительном пути, по которому вы думаете, что он должен существовать).

+1

Я согласен с комментарием «некоторые другие проблемы», но ни один из них не должен вызывать SEGV. – paxdiablo

+0

Путь действителен, поскольку он приостанавливается примерно на 20 секунд, пытаясь открыть файл, а затем выдает segfault. Я могу открыть меньшие файлы в том же каталоге с этим вызовом. – NoneType

+0

На самом деле он может segv, если он выдает необработанное исключение: «в зависимости от значения, установленного с исключениями, может быть выбрано исключение». И поскольку он ждет 20-х годов, я собираюсь еще догадываться, что по какой-то причине пытается найти сеть (сетевой сопоставленный диск?) – Blindy