2012-01-05 20 views
1

我正在使用C++編寫Visual Studio 2008,並且遇到了其他庫的問題 - 他們不接受我用txt文件生成的行尾(EOL)。如何更改txt文件中的EOL編碼?

我怎樣才能改變這種狀況,而與

std::ofstream myFile; 
myFile.open("traindata.txt"); 
myFile << "stuff" << endl; 
// or 
//myFile << "stuff" << '\n'; 
myFile.close(); 

編輯寫文件2:

好吧,我的確在代碼中的錯誤:我被追加「0」每次迭代使在EOL之前我有空白。

壞。你們是對的。感謝幫助。

+1

哪行尾是你的代碼生成?這些「其他圖書館」期望哪些行結局? – 2012-01-05 21:34:27

+0

@GregHewgill我不確定哪一個正在生成,但我需要LF。 – Patryk 2012-01-05 21:46:38

+0

在窗口上使用'endl'或'\ n'時,它將在文本模式下自動轉換爲CRLF。 – 2012-01-05 21:48:14

回答

3

您是否有可能不希望\ n結束行序發生?使用std::ios_base::binary打開您的文件:這會正確切換轉換。 ...不要使用std::endl,除非你真的要刷新流:

std::ofstream myFile("traindata.txt", std::ios_base::binary); 
myFile << "stuff\n"; 

close()通常也是不必要的,除非你要檢查它是成功的。

-1

對於Windows風格的結尾使用myfile << "\r\n",對於UNIX風格使用myfile << "\n"

+0

這不是一個完整的答案,因爲在Windows上,將''\ n「'寫入文本文件時會默默地轉換爲」\ r \ n「'。 – 2012-01-05 21:37:17

+0

-1。使用'myfile <<「\ n」'仍然會在Windows上產生CRLF行結尾,因爲文件是以文本模式打開的,替換是在低級文件服務中執行的 – 2012-01-05 21:38:31

+0

@GregHewgill那麼'\ n '? – Patryk 2012-01-05 21:38:53

0

你應該以二進制方式打開文件流,以保持C++庫的自動轉換行尾:

myFile.open("traindata.txt", std::ios_base::out|std::ios_base::binary); 

這將讓C++庫從「\ n」轉換爲特定於操作系統的EOL符號(CR- LF在Windows上)。

0

下載記事本++ - 應該能夠解決這個問題。

或者dos2unixunix2doscygwin

相關問題