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