如何在C++中使用ifstream读取替换字符?(ASCII中的SUB)

3

我在使用 fstream 的 get 函数时遇到了困难,无法读取所有字符。我的代码如下:

ifstream input_stream(input_filename.c_str(), ios::in);
string input;

if(input_stream)
{
    char character;
    while(input_stream.get(character))
    {
        input += character;
    }
    input_stream.close();
}
else
    cerr << "Error" << endl;

经过一些测试,我发现当字符 = 26 (ASCII中的SUB)时会出现问题,因为input_stream.get(26)返回false并且我跳出了while循环。我想在我的字符串输入中包含来自文件的所有字符,包括SUB。我先尝试使用getline函数,但遇到了类似的问题。请问能否帮助我解决这个问题?


在哪个操作系统上? - undefined
2
一定是Windows - 亲爱的老朋友Control-Z又出现了。 - undefined
1个回答

8

您需要读取二进制流,而不是文本流(因为SUB,即'0x1a'(即26)是ASCII或UTF8中的控制字符,而不是可打印字符)。在打开时使用ios::binary

 ifstream input_stream(input_filename.c_str(), ios::in | ios::binary);

也许您将会编写代码。
 do {
   int c= input_stream.get();
   if (c==std::char_traits::eof()) break;
   input += (char)c;
 } while (!input_stream.fail());

你是否考虑使用std::getline来读取整行内容,假设输入文件仍然是以('\n'为结尾的)行组织的?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接