2016-04-30 47 views
0

我有幾個std::vector長度Nlong, string, double類型。我想是這樣寫的純文本文件:使用ofstream寫入二進制沒有ios ::二進制標誌C++

int N = 100; 
std::vector<std::string> var1String(N), var2String(N), var3String(N), var4String(N); 
std::vector<long> var1Long(N); 
std::vector<double> var1Double(N); 

... 

std::ofstream f(path2file); 
     for(int i=0; i<N; i++) 
    { 
f << var1String[i] << " " << var2String[i] << " " << var1Long[i] << " " << var3String[i] << " " << var1Double[i] << " " << var4String[i] << std::endl; 
} 

雖然我不使用它被寫成二進制ios::binary flag,我可以在Linux下輕鬆閱讀。但是我想將它寫入一個純ASCII文本文件。 (注意:我也嘗試將var1Long[i]var1Double[i]轉換爲字符串而沒有任何區別)。我究竟做錯了什麼?

編輯:它是一個更大的程序的一部分,從服務器獲取一些輸出到ASCII向量。正如我所說的,當用linux讀取二進制文件或使用std::cout而不是f來運行程序時,它的打印效果非常好。我只是不明白什麼可能會導致流作爲二進制傳遞。

+2

你能發佈一個示例輸出嗎? (十六進制,ASCII) – LogicStuff

+1

無法重現,這只是創建一個文本文件? - 請發佈*實際*代碼來重現問題,這甚至不編譯(varLong1未聲明) – stijn

回答

2

你認爲ios::binary有什麼作用?

由於explained by Nick Bedford在«What's the difference between opening a file with ios::binary or ios::out or both?»:

ios::binary可以確保數據被讀取或者不轉換新行字符,並從上飛\ r \ n寫的。換句話說,你給這個流的正是你寫的東西。

它確實標記爲二進制內容的文件,它只是從翻譯C新型線到他們的文本表示保留。因此它不在而不是阻止文件包含二進制數據。

簡而言之:由於「字符串」變量確實包含二進制數據,因此可以在文件中獲取二進制數據。