c++ - Using ifstream when filename contains wide characters -
c++ - Using ifstream when filename contains wide characters -
using c++builder xe5 (bcc32) in windows 7.
i trying open file filename contains wide character. actual filename i'm testing c:\bΛx\foo.txt. non-ascii character there u+039b .
i have filename stored correctly in std::wstring. however, trying:
std::ifstream f( filename.c_str() ); fails open file.
of course, in standard c++ fopen takes char *. however, dinkumware c++ rtl implementation has overload accepting wchar_t *. unfortunately implementation of overload in ...\embarcadero\rad studio\12.0\source\cpprtl\source\dinkumware\source\fiopen.cpp not phone call _wfopen. instead uses wcstombs convert string utf-8 , calls fopen.
checking source fopen, calls narrow version of underlying function ___topen passes utf-8 string createfile.
when inspect effort open file using sysinternals process monitor, shows did effort open file utf-8 file string, , operating scheme rejected result name collision.
if open file using _wfopen( filename.c_str(), l"r" ) , can read file using c i/o functions, can't utilize c++ iostreams of course.
is there way utilize std::ifstream open file u+039b or other such characters in filename?
note using std::wifstream doesn't work either (it still tries open utf-8 version of filename).
if open file using _wfopen( filename.c_str(), l"r" ) , can read file using c i/o functions, can't utilize c++ iostreams of course.
i don't see "of course". problem reduced making iostreams streambuf file*. howard hinnant answered here there's no method provided standard, implementing streambuf-derived class on top of file* pretty straightforward. mentions code feels starting point.
note makes sense text file. iostreams , binary files not along; there's character encoding layer , ios_base::binary not turn off.
c++ windows unicode ifstream c++builder-xe5
Comments
Post a Comment