2011-11-07 20 views
0

我試圖打開/usr/share/dict/words用下面的代碼:fstream是否打開大文件有問題?

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

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

我不知道爲什麼f.is_open()將返回假的?

更多信息:當我嘗試一個較小的測試文件包含20行的順序f.is_open()返回true。也許f.open正試圖將整個文件加載到內存中?

+2

我猜它與文件大小無關。 'fstream'_might_可能會遇到大文件的問題,但只有當您嘗試查找和比較偏移量時,您纔會這樣做。 –

回答

6

它不起作用,因爲您正在打開文件進行讀寫。除非您以root身份運行,否則您無權寫入此文件。

如果你打開它只是讀取它的工作:

f.open("/usr/share/dict/words", fstream::in); 
4

的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); 
+4

...或更好,但更改流類型爲'ifstream',因爲只有輸入可以完成 –