c ++ fstream打开文件,名称为utf-16

时间:2013-01-28 18:27:34

标签: c++ windows qt

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

当我开始转向Windows时遇到了一些问题。
我有一个文件的名称,我想用UTF-16编码打开。 enter image description here

我尝试使用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 *发送的字符串在第一个零之后被截断,并且只发送了文件名的一个符号,所以永远找不到文件。我知道Vissual studio中的wfstream可以接受wchar_t *行作为名称,但我选择的编译器是MinGW,它没有wstring构造函数的签名。

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

ADDITION
该字符串不仅可以包含Ascii符号,还可以同时包含俄语,德语,中文符号。我不希望仅将自己限制为ASCII或本地编码。

下一次添加
数据也可能不同,不仅仅是ASCII,否则我根本不会打扰自己。  例如。

enter image description here

提前致谢!

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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。

答案 2 :(得分:0)

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