虽然我怀疑我知道答案,但我会对人们的反应感兴趣。
目前,我有一个在W2K3上运行的VC6应用程序,它使用以下代码读取文本文件(简化代码):
string line;
ifstream infile("test.txt",ios::in);
while (!infile.eof())
{
getline(infile,line);
}
...
文件中的每个记录都有以竖线分隔的字段,尽管字段和记录的长度不固定,但由于使用了CRLF,代码工作得很好。现在的问题是,文件将是二进制的,因为除了文本之外,一些数据还是无符号的压缩十进制。基本上,如果作为二进制文件打开(分隔符和LF保留),上面的代码仍然有效吗?我尝试了一些虚拟数据的快速测试,它似乎表现出相同的行为。
我的理解是,二进制文件是在了解数据内容的情况下读取的,因此可以正确地检索字节,并使用LF。我在web上搜索过,找到了C++和其他.NET语言的各种选项(一个选项),但似乎没有一种语言能够一次读取一行--即使可变大小的数据和LF似乎违背了使用二进制文件的目的--而且我不想一次性读取整个文件,因为它可能非常大(希望一次不读取一个字符)。
那么,如果上述情况成立,是否存在数据丢失的风险?如果不是,其他选择将不胜感激。如果我在这里遗漏了什么,请随时详细说明。
发布于 2011-01-26 01:02:34
如果你依赖于CRLF限制的行,那么如果二进制数据有CRLF,你会得到一个错误的换行符。此外,如果二进制数据包含值124 (垂直管道),则在确定列时会出现问题。
https://stackoverflow.com/questions/4800523
复制