如果我像打開一個文件::作爲ios :: binary打開的文件與打開爲ios :: binary的文件不同。 IOS ::出來?
ofstream file("file.dat",ios::binary);
或
ofstream file("file.dat",ios::binary | ios::out);
我能做些什麼,在後者的方式打開的文件,我不能與前形式做的,反之亦然
謝謝
如果我像打開一個文件::作爲ios :: binary打開的文件與打開爲ios :: binary的文件不同。 IOS ::出來?
ofstream file("file.dat",ios::binary);
或
ofstream file("file.dat",ios::binary | ios::out);
我能做些什麼,在後者的方式打開的文件,我不能與前形式做的,反之亦然
謝謝
感謝誰回答了我所有的人: 我現在測試取決於我已經回答了幾個代碼,並想出了這樣的總結:使用ofstream的
: 的ios ::出來,甚至默認如果沒有指定任何內容,但如果僅使用withstream的ios :: in,則不會編譯錯誤(除非使用read()或>>或某個ifstream對象),但不會寫入文件。
使用ifstream的: 的ios ::中是默認的,即使沒有指定,但如果你只使用的ios ::出與ifstream的,沒有編譯錯誤(除非你使用write()或< <或一些ofstream對象),但不能從文件中讀取任何信息。
使用fstream: 沒有默認設置,您必須明確確定您要做什麼。否則,沒有編譯錯誤,但你沒有得到你想要的。
至於原來的問題,兩者工作完全一樣!
對於一個流,ios::out
是默認的,所以沒有什麼區別。我相信指定ios :: out的唯一時間是有區別的,如果你使用fstream,它可以打開閱讀或寫作,或者兩者兼而有之。
在大多數情況下,我認爲沒有區別,儘管看起來這在技術上可能是特定於實現的。
在我的實現(gcc 3.4.3)中,forstream的open會在ofstream-> open()調用中使用ios ::: out模式,而不管通過構造函數指定什麼,所以它純粹是可選的。如果使用fstream,則情況並非如此,需要明確指定。
檢出標準,第27.8.1.3節討論各種ios
修飾符(如ios::in
和ios::out
),並將它們映射到C fopen()
參數。根據標準,如果在打開的文件上沒有指定修飾符,則打開失敗。
在27.8.1.9,我們發現ofstream
這樣工作,但是自動指定了ios::out
。因此,原始問題的答案是兩者的工作原理完全相同。
我不知道爲什麼人們發現fstream
沒有ios::in
或ios::out
,但我對標準的閱讀不應該起作用。我會對其他人的27.8.1.3的讀數感興趣。
在哪裏可以找到這個標準? – 2010-02-09 18:24:23
no 如果你使用fstream,你既可以寫ios :: out也可以寫ios :: in,你仍然可以從文件中讀寫。 所以不是它總是一樣的寫不寫ios :: out? – 2010-02-09 17:57:38
@Imengineer:我必須檢查確定,但是如果內存服務fstream在默認情況下爲輸入和輸出都打開,但是如果您指定ios :: out,則僅打開輸出,並且如果指定ios :: in,它僅用於輸入。儘管如此,這絕對不是保證。 – 2010-02-09 18:00:34