起初我在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 *发送的字符串在第一个零之后被截断,并且只发送了文件名的一个符号,所以永远找不到文件。我知道Vissual studio中的wfstream可以接受wchar_t *行作为名称,但我选择的编译器是MinGW,它没有wstring构造函数的签名。
有没有办法用STL流做到这一点?
ADDITION
该字符串不仅可以包含Ascii符号,还可以同时包含俄语,德语,中文符号。我不希望仅将自己限制为ASCII或本地编码。
下一次添加
数据也可能不同,不仅仅是ASCII,否则我根本不会打扰自己。
例如。
提前致谢!
答案 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字符串。