2010-05-01 69 views
11

不同的平臺使用不同的行分隔符方案(LF,CR-LF,CR,NEL,Unicode LINE SEPARATOR等)。 C++(和C)運行時庫通過將'\n'轉換爲目標平臺的本地新線路編碼並將其轉換爲大多數程序透明化。但是如果你的程序需要確定使用的實際字節序列,那麼你怎樣才能移植它呢?確定平臺行分隔符的便攜方式

我想出最好的方法是:

  1. 寫在文本模式下的臨時文件,只是在'\n'它,讓運行時做翻譯。
  2. 以二進制模式回讀臨時文件以查看實際字節。

這感覺很糟糕。有沒有辦法做到沒有臨時文件?我嘗試使用stringstreams,但運行時實際上並未在該上下文中翻譯'\n'(這很有意義)。運行時是否以其他方式公開這些信息?

回答

7

我不是C/C++專家,但標準庫中似乎沒有任何東西可以直接給出行分隔符。翻譯由文本模式文件功能透明地處理。

即使你覺得你的方法是「混亂」,它可能是最簡單也是最可靠的,因爲你真的測試了什麼行分隔符被使用和寫出。而且是可移植的,因爲您正在使用標準庫函數來編寫和讀取文件。