0

起初我在 Linux 上构建了我的项目,它是围绕流构建的。

当我开始迁移到 Windows 时,我遇到了一些问题。
我有一个要以 UTF-16 编码打开的文件的名称。 在此处输入图像描述

我尝试使用 fstream 来做到这一点:

QString source;  // content of  source  is shown on image
char *op= (char *) source.data();
fstream stream(op, std::ios::in | std::ios::binary);

但无法打开文件。
当我检查它时,

 if(!stream.is_open())
   {}  // I always get that  it's not opened. But file indeed exists.

我试着用 wstream 来做。但结果是一样的,因为 wstream 也只接受 char *。据我了解是这样,因为作为 char * 发送的 string 在第一个零之后被截断,并且只发送文件名的一个符号,因此永远找不到文件。我知道 Vissual Studio 中的 wfstream 可以接受 wchar_t * 行作为名称,但我选择的编译器是 MinGW,它没有 wstring 构造函数的签名。

有没有办法用 STL 流来做到这一点?

添加
该字符串不仅可以包含 Ascii 符号,还可以同时包含俄语、德语、中文符号。我不想将自己仅限于 ASCII 或本地编码。

下一个补充
数据也可以不同,不仅是ASCII,否则我根本不会用Unicode来打扰自己。例如

在此处输入图像描述

提前致谢!

4

3 回答 3

3

Boost::Filesystem尤其是fstream.hpp标头可能会有所帮助。

于 2013-01-28T18:54:09.760 回答
3

如果您使用的是 MSVC 并且它是 c++ 标准库的实现,那么这样的东西应该可以工作:

QString source;  // content of  source  is shown on image
wchar_t *op= source.data();
fstream stream(op, std::ios::in | std::ios::binary);

这是因为 Microsoft c++ 实现有一个扩展,允许使用宽字符串打开 fstream。

于 2013-01-28T20:07:24.260 回答
0

在将文件名传递给 fstream 之前,使用带 CP_ACP 的WideCharToMultiByte转换 UTF-16 字符串。

于 2013-01-28T18:58:48.180 回答