C++ プロジェクトで多くの Unicode ファイル パスを処理しています。私は自分のコードでチェックを実行します。それらがマルチバイト文字列に収まるのに十分な場合は、通常の文字列 (std::string) 変数として保持します。文字列がマルチバイト文字列に収まらない場合は、変数として使用します。ワイド文字列。
私の質問は、パスを完全に wstring として使用できるかどうかです..? パフォーマンスに影響しますか?文字列の操作、ファイルのオープン、作成、名前の変更、および wstring を使用した削除を行う必要があります。したがって、マルチバイト文字列またはワイド文字列をチェックするのではなく、それを wstring として直接使用して、if/else を大幅に節約したいと考えています。
bool IsUnicodeWString(const std::wstring &_WStr)
{
WCHAR* posUnicodePath = (WCHAR*)_WStr.c_str();
size_t multiByteLen = wcstombs(NULL, posUnicodePath, 0) + 1;
int tempLength = 0;
if (multiByteLen > 0)
{
TCHAR* _tmpTChar = new TCHAR[multiByteLen + 1];
memset(_tmpTChar, '\0', multiByteLen + 1);
tempLength = wcstombs(_tmpTChar, posUnicodePath, multiByteLen);
if (tempLength == std::string::npos)
{
multiByteLen = 0;
}
delete[] _tmpTChar;
}
if(multiByteLen == 0 || multiByteLen == std::string::npos) { // Is Unicode file
return true;
}
else{
return false;
}
}
if(IsUnicodeWString) {
// Use wstring [ Operations - String Manipulations,FilePath used for Open,Read,Write,Create,Delete,Rename,etc]
} else {
//string [ Operations - String Manipulations,FilePath used for Open,Read,Write,Create,Delete,Rename,etc]
}
あなたの考えを共有してください...