繁体   English   中英

C ++ fstreams打开带有utf-16名称的文件

[英]c++ fstreams open file with utf-16 name

最初,我在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。 例如

在此处输入图片说明

提前致谢!

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

如果您使用的是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。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM