I have filenames using char16_t characters:
char16_t Text[2560] = u"ThisIsTheFileName.txt";
char16_t const* Filename = Text;
How can I check if the file exists already? I know that I can do so for wchar_t using _wfindfirst(). But I need char16_t here.
Is there an equivalent function to _wfindfirst() for char16_t?
Background for this is that I need to work with Unicode characters and want my code working on Linux (32-bit) as well as on other platforms (16-bit).
findfirst()is the counterpart to_wfindfirst().However, both
findfirst()and_wfindfirst()are specific to Windows.findfirst()accepts ANSI (outdated legacy stuff)._wfindfirst()accepts UTF-16 in the form ofwchar_t(which is not exactly the same thing aschar16_t).ANSI and UTF-16 are generally not used on Linux.
findfirst()/_wfindfirst()are not included in the gcc compiler.Linux uses UTF-8 for its Unicode format. You can use
access()to check for file permission, or useopendir()/readdir()/closedir()as the equivalent tofindfirst().If you have a UTF-16 filename from Windows, you can convert the name to UTF-8, and use the UTF-8 name in Linux. See How to convert UTF-8 std::string to UTF-16 std::wstring?
Consider using
std::filesystemin C++17 or higher.Note that a Windows or Linux executable is 32-bit or 64-bit, that doesn't have anything to do with the character set. Some very old systems are 16-bit, you probably don't come across them.