我必须使用将文件名作为字符串接受的库(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字符串。