适用于Linux的UTF-8编码wifstream getline

时间:2019-05-06 22:28:13

标签: c++ file stream ifstream

我正在编写在Linux和Windows上都可以使用的代码(如果这意味着引入一些ifdef宏,那很好)。用于wifstream的linux getline似乎只接受wchar_t,并且由于wchar_t是编译器特定的实现,当我尝试读取单词poké时,我没有得到想要的结果。

这是我的实现的摘要:

std::wifstream GetFp()
{
    auto fp =  std::wifstream (path, std::wifstream::binary);
    const std::locale utf8_locale
                = std::locale(std::locale(), new std::codecvt_utf8<WCHAR>());
            fp.imbue(utf8_locale);
}

稍后,我将其设为以下唯一指针:

auto ifs = std::make_unique<std::wifstream>(GetFp());

在readfile函数下,有一个for循环,该循环从文件逐行获取。称为getline(ifs.get()的读取行函数实现如下:

bool getline(std::wistream* ifs)
{
#ifndef XPLATFORM
    TChar buf[8192];
#else
    wchar_t buf[8192];
#endif
ifs->getline(buf, _countof(buf));
if (ifs->eof())
   return false;
return true;
}

如果我为Linux实现尝试了除wchar_t之外的任何其他数据类型,它总是给我带来编译问题。任何解决此问题的建议将非常有帮助。

0 个答案:

没有答案