68#if LOCAL_USE_WIN32_WOPEN
75 const int utf16_size =
76 MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str.c_str(),
static_cast<int>(str.length()),
nullptr, 0);
78 return (utf16_size != 0);
90#if LOCAL_USE_WIN32_WOPEN
93Utf8StringToWString(
const std::string & str)
100 const int utf16_size = MultiByteToWideChar(CP_UTF8, 0, str.c_str(),
static_cast<int>(str.length()),
nullptr, 0);
105 wstr.resize(utf16_size);
106 MultiByteToWideChar(CP_UTF8, 0, str.c_str(),
static_cast<int>(str.length()), &wstr[0], utf16_size);
118#if LOCAL_USE_WIN32_WOPEN
121 const std::wstring str_utf16 = Utf8StringToWString(str);
122 return _wopen(str_utf16.c_str(), flags);
124 return open(str.c_str(), flags);
131I18nOpen(
const std::string & str,
const int flags,
const int mode)
133#if LOCAL_USE_WIN32_WOPEN
136 const std::wstring str_utf16 = Utf8StringToWString(str);
137 return _wopen(str_utf16.c_str(), flags, mode);
139 return open(str.c_str(), flags, mode);
147#if LOCAL_USE_WIN32_WOPEN
148 return I18nOpen(str, _O_RDONLY | _O_BINARY);
158#if LOCAL_USE_WIN32_WOPEN
161 return I18nOpen(str, _O_WRONLY | _O_CREAT | _O_BINARY, _S_IREAD | _S_IWRITE);
165 return I18nOpen(str, _O_WRONLY | _O_CREAT | _O_APPEND | _O_BINARY, _S_IREAD | _S_IWRITE);
170 return I18nOpen(str, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
173 return I18nOpen(str, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
178 return I18nOpen(str, O_WRONLY | O_CREAT, S_IREAD | S_IWRITE);
182 return I18nOpen(str, O_WRONLY | O_CREAT | O_APPEND, S_IREAD | S_IWRITE);
190I18nFopen(
const std::string & str,
const std::string & mode)
192#if LOCAL_USE_WIN32_WOPEN
194 const std::wstring str_utf16 = Utf8StringToWString(str);
195 const std::wstring mode_utf16 = Utf8StringToWString(mode);
196 return _wfopen(str_utf16.c_str(), mode_utf16.c_str());
198 return fopen(str.c_str(), mode.c_str());
202#if LOCAL_USE_FDSTREAM
206 I18nOfstream(
const char * str, std::ios_base::openmode mode = std::ios_base::out)
215 ~I18nOfstream() { this->close(); }
241 I18nIfstream(
const char * str, std::ios_base::openmode itkNotused(mode) = std::ios_base::in)
250 ~I18nIfstream() { this->close(); }
272#elif LOCAL_USE_WIN32_WOPEN
276 I18nOfstream(
const char * str, std::ios_base::openmode mode = std::ios_base::out)
277 : std::ofstream(Utf8StringToWString(str).c_str(), mode)
284 I18nIfstream(
const char * str, std::ios_base::openmode mode = std::ios_base::in)
285 : std::ifstream(Utf8StringToWString(str).c_str(), mode)