Есть ли у fstream open проблемы с большими файлами?

Я пытаюсь открыть /usr/share/dict/words с помощью следующего кода:

fstream f;
f.open("/usr/share/dict/words");

// why is this returning false?
bool open = f.is_open();

Мне интересно, почему f.is_open() возвращает false?

Дополнительная информация: когда я пробую тестовый файл меньшего размера, содержащий порядка 20 строк, f.is_open() возвращает true. Возможно, f.open пытается загрузить в память весь файл?


person SundayMonday    schedule 07.11.2011    source источник
comment
Я предполагаю, что это не имеет никакого отношения к размеру файла. fstream могут возникнуть проблемы с большими файлами, но только когда вы пытаетесь искать и сравнивать смещения, чего вы не делаете.   -  person Mooing Duck    schedule 07.11.2011


Ответы (2)


Это не работает, потому что вы открываете файл для чтения и записи. Если вы не работаете как root, у вас нет прав на запись в этот файл.

Если вы откроете его только для чтения, он будет работать:

f.open("/usr/share/dict/words", fstream::in);
person rve    schedule 07.11.2011

Функция fstream.open() объявляется следующим образом:

 void open (const char *filename,
        ios_base::openmode mode = ios_base::in | ios_base::out );

то есть открывает файл для чтения и записи. Ваш процесс, вероятно, не имеет разрешений на открытие этого файла для записи, если вы не работаете с правами root. Откройте его для чтения только с помощью

  f.open("/usr/share/dict/words", ios_base::in);
person nos    schedule 07.11.2011
comment
... или еще лучше измените тип потока на ifstream, так как в нем можно делать только ввод - person K-ballo; 07.11.2011