用Unicode文件名进行FOPEN



我必须使用将文件名作为字符串接受的库(const char*)。内部文件使用fopen打开。有没有办法使该库接受Unicode文件名?我可以使用widechartomultibyte在将UTF转换为UTF之前将其转换为图书馆?

一种可能的解决方案是更改库接口(char* -> wchar_t*),然后用Windows特定的_wopen替换fopen。另一个解决方案是使用创建符号链接到文件并将其传递到库,但仅限于NTFS卷。

最好的方法是重写lib ...只是我的2美分。

但是,如果它只是要打开现有文件,则可以使用getShortPathName您在此处找到有关这种方式的现有讨论。

使用widechartomultibyte您只能打开只有一个只包含ANSI字符的文件名的文件。这是因为文件函数的ANSI变体(使用" char *"类型参数)无法打开文件名中包含255个字符的文件。

使用GetShortPathName的缺点是,它可能在某些不支持" 8.3"文件名称的文件系统(也许是某些类型的网络驱动器)上不起作用。

我将使用" _wfopen"函数重写库(" fopen"的unicode等效于" _wfopen",而不是" _wopen")。

请注意,使用_wfopen时," fopen"的第二个参数也必须是Unicode字符串。

最新更新