2011-01-26 168 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