這兩者有什麼區別?是不是in
標誌對象的事情是多餘的?謝謝。ios :: in是否需要在二進制模式下打開ifstream?
std::ifstream file1("one.bin", std::ifstream::in | std::ifstream::binary);
std::ifstream file2("two.bin", std::ifstream::binary);
這兩者有什麼區別?是不是in
標誌對象的事情是多餘的?謝謝。ios :: in是否需要在二進制模式下打開ifstream?
std::ifstream file1("one.bin", std::ifstream::in | std::ifstream::binary);
std::ifstream file2("two.bin", std::ifstream::binary);
從上ifstream
類的構造文檔:
二進制(二進制)考慮流作爲二進制而不是文本。
in(輸入)允許在流上進行輸入操作。
所以從文件中讀取的時候,我會用std::ifstream::in
標誌,不是因爲它是必需的(或沒有),而是因爲這將是一個良好的編程習慣,讓編程接口知道你要作什麼用途。
編輯:
以下是從http://www.cplusplus.com/doc/tutorial/files/拍攝,約open()
成員函數雖然(但在問題的代碼構造函數可能跟open()
複製模式標誌不加修改)。
類:默認模式參數
ofstream的:IOS ::出
ifstream的:IOS ::在
的fstream:IOS ::在| IOS ::出對於ifstream的和ofstream的類,IOS ::在和IOS ::出自動和分別是 假定,即使不 一個模式包括它們作爲第二個參數到打開傳遞()會員 功能。
儘管如此,Web上的很多示例在顯示ifstream
對象的構造時使用ifstream::in
。真的可能是某種迷信的做法,而不是編程。
@ Naveen:我需要讓'ifstream'知道我想用它作爲_input_嗎?我可以簡單地使用'fstream' - 這就是爲什麼我首先發布了這個問題。 :) –
是的,好點:P在編輯中我已經變得柔軟了。 –
夥計們,停止upvoting我的答案,因爲它並沒有真正給出太多的答案,只是表達了個人意見加上給'open()'成員函數一些間接相關的信息。但是,這並不意味着我希望它得到downvoted =) –
我不能在網上找到權威的文檔。
編輯我什至不能找到一個適當的參考在我的副本Josuttis Book,第8次印刷。 它應該是在第13.9頁627-631
經驗證據表明它是多餘的IFF沒有的std :: IOS的::在或std :: IOS:出傳遞:
#include <fstream>
#include <iostream>
int main(int argc, char** args)
{
std::ifstream ifs(args[0], std::ios::binary);
std::cout << ifs.rdbuf() << std::flush;
return 0;
}
成功:
test | md5sum
md5sum test
顯示相同的哈希總和。
// ...
std::ifstream ifs(args[0], std::ios::out | std::ios::binary);
將失敗(零字節輸出)
test | wc -c # shows 0
binary
,在這種情況下,僅指讀寫方法。在Windows的常規模式下,'\n'
被翻譯爲'\r''\n'
。這可能會影響讀取和寫入,所以二進制模式會將其關閉。 out|binary
與in|binary
erm ...從文檔我不認爲它是多餘的;這是值得30秒...嘗試:) – sehe
爲什麼它相關,如果它的二進制或不? – Dani