我有使用char16_t字符的文件名:
char16_t Text[2560] = u"ThisIsTheFileName.txt";
char16_t const* Filename = Text;如何检查文件是否已经存在?我知道,对于使用wchar_t的_wfindfirst(),我可以这样做。但我需要char16_t在这里。
是否有一个与_wfindfirst() char16_t**?**的等价的函数?
这方面的背景是,我需要处理Unicode字符,并希望我的代码能够在Linux (32位)以及其他平台(16位)上工作。
发布于 2022-07-18 16:05:22
findfirst()是与_wfindfirst()相对应的。
但是,findfirst()和_wfindfirst()都是特定于Windows的。findfirst()接受ANSI (过时的遗留东西)。_wfindfirst()以wchar_t的形式接受UTF-16 (这与char16_t不完全一样)。
ANSI和UTF-16通常不在Linux上使用。gcc编译器中不包括findfirst()/_wfindfirst()。
Linux使用UTF-8作为Unicode格式。您可以使用opendir()/readdir()/closedir()检查文件权限,也可以使用access()等效于findfirst()。
如果您有来自Windows的UTF-16文件名,则可以将名称转换为UTF-8,并在Linux中使用UTF-8名称。请参阅How to convert UTF-8 std::string to UTF-16 std::wstring?
考虑在std::filesystem或更高版本中使用C++17。
请注意,Windows或Linux可执行文件是32位或64位,这与字符集无关。有些非常老的系统是16位的,你可能不会碰到它们。
https://stackoverflow.com/questions/73023640
复制相似问题