ifstream 在行尾读取额外字符 (CR 13 LF 10)

零零三度

我目前正在读取一个换行符占 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

读取文件后删除CR或LF或CRLF

如何使用 BufferedReader 读取 CR LF 行?

在NGINX中避免使用CR:LF字符

读取 CR/LF 字符时 VBA PPT 错误

VBS 文件读取:将 CR FF 更改为 CR LF

Notepad ++行尾(EOL)符号“ CR”和“ LF”的样式?

CR LF notepad ++移除

尝试读取9到13之间的无符号字符时,ifstream行为非常奇怪

Windows.h-SetWindowText显示CR-LF字符

Powershell 字符串保持 CR 和 LF

用C中的LF替换CR LF

CR LF,LF和CR换行类型之间的区别?

newLine()和CR / LF比较

有没有办法使Ruby CSV gem在Windows(CR LF)行尾生成CSV?

更改std :: endl以输出CR + LF而不是LF

如何在 Java 中检查字符串是否包含回车 (CR) 或换行 (LF) 字符

在记事本中每行末尾显示CR和LF字符

APK的文件名不能包含(NUL,CR,LF)个字符

java.lang.IllegalArgumentException:在方法名称中找到无效字符(CR或LF)

是否有Windows文件格式,其中包含<CR>分隔的记录(没有<LF>字符)?

“字符串”实用程序,包括换行(LF)和回车符(CR)

PHP mPDF QR代码,带有特殊字符,如LF和CR

Bash:从变量末尾删除所有特殊字符(不仅仅是 CR 或 LF)

java.lang.IllegalArgumentException:重定向位置中的无效字符(CR / LF)

如何处理不同的行尾,例如AWK中以CRLF(\ r \ n)结尾的行和以LF(\ n)或CR(\ r)结尾的行

ifstream检查读取错误

Ifstream读取无用的数据

从文件读取C ++ Ifstream

在HTML属性中添加CR或LF