我目前正在读取一个换行符占 2 个字节的文本文件,因为它将换行符写为 CRLF 而不是仅 LF。
std::fstream fileReader = std::fstream(_filename, std::ios::in);
// READ THE SIZE OF THE FILE:
fileReader.seekg(0, fileReader.end); // set reader position to the end
std::streamsize fileSize = fileReader.tellg(); // get reader position
fileReader.seekg(0, fileReader.beg); // set reader position to the start
// SET UP THE BUFFER:
std::vector<char> buffer; buffer.resize(fileSize, '\0');
buffer.back() = '\0';
// READ:
fileReader.read(buffer.data(), fileSize);
问题在于,“fileSize”实际上是文件的大小,而不是文件中非 CF 的字符数——这是它所期望的。
有没有办法自动获取该号码?
否则,我认为二进制模式是唯一剩下的选项——尽管它会非常令人失望,因为我期望在不使用二进制模式时进行正确的自动格式化。此外, .read 函数失败(fileReader 的 failbit 为真)
这是正常行为:
ifstream::read 期望“将提取的字符数”作为参数,而不是文件大小。
由于这个数量是不可能预测的,而且函数也没有提供它,使用 ifstream::read 没有 ios::binary 标志是完全没用的,除非知道文件不包含任何 CF 字符,这会使 ifstream 吓坏.
(我不知道其他字符是否也让 ifstream 吓坏了)
我建议在 fstream 中使用 ios::binary,即使是读取文本文件,也可以在一个操作中读取它们。也可能用于写入文件(特别是如果您使用的是 Windows)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句