2011-01-26 172 views
0

雖然我懷疑我知道答案,但我會對人們的回答感興趣。閱讀二進制文件

目前,我有W2K3運行VC6的應用程序讀取使用以下(簡化代碼)的文本文件:

string line; 
ifstream infile("test.txt",ios::in); 
while (!infile.eof()) 
{ 
    getline(infile,line); 
} 
... 

文件中的每條記錄都有的管道分隔字段和代碼工作正常感謝CRLF,儘管字段和記錄不是固定的長度。現在的問題是,由於某些數據是無符號壓縮的十進制文件,因此文件將變爲二進制文件。基本上,上面的代碼仍然有效,如果打開爲二進制文件(分隔符和LF保留)?我用一些虛擬數據嘗試了一個快速測試,它似乎表現相同。

這是我的理解是,二進制文件閱讀w /知識的數據內容,所以字節可以正確檢索和無LF。我搜索了網絡,發現了C++和其他.NET語言的各種選項(一個選項),但沒有人能夠一次讀取一行 - 即使可變大小的數據和LF似乎擊敗了使用二進制文件 - 我不想一次讀取整個文件,因爲它可能很大(希望不要一次讀取一個字符)。

因此,如果上述可能是有效的,是否有數據丟失的風險?如果不是,其他選項將不勝感激。如果我在這裏錯過了一些東西,請隨時詳細說明。

回答

0

如果你依賴於被CRLF限制的行,那麼如果二進制數據有CRLF,你將得到一個假的換行符。另外,如果二進制數據包含值124(垂直管道),則確定列時會出現問題。

+0

同意,但假設LF和管道不是「數據」的一部分,因此它們可以用作字段和行分隔符。 – user589918 2011-01-26 03:00:44