在 `ifstream::getline` 中禁用 Ctrl-Z 行为

发布时间:2021-03-02 17:57

我想使用 ifstream::getline 从文件中读取行,但该文件包含字节 Ctrl-Z (0x1A),这使 getline 认为它已到达文件末尾(这是在 Windows 中——在 *nix 中,如果我没记错的话,它将是 Ctrl-D)。我可以以某种方式禁用此行为,并告诉 getline 忽略 Ctrl-Z 吗?

仅供参考:文件是 WebAssembly testsuite 中的 comments.wast,它测试 WebAssembly 解析器接受块注释中的任何和所有字符的能力。

回答1

当您的 ifstream 对象使用二进制模式时,不应发生这种情况。 只需像这样创建它:

std::ifstream fin(<path>, std::ios::binary)

这当然会阻止您使用流的其他功能,但如果您的主要目标是能够在忽略特殊字符的同时读取所有类型的值,这可能是要走的路。