我正在處理我的C++項目中的很多Unicode文件路徑。我在我的代碼中執行檢查,如果它們足夠適合Multibyte字符串,我將它保存爲一個普通字符串(std :: string)變量,其他字符串不適合多字節我將它用作寬字符串。寬字符串與字符串,是否影響Windows C++性能
我的問題是我是否可以完全使用路徑作爲wstrings ..?會影響性能,我必須做一些字符串操作,使用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]
}
請分享你的想法...
您應該無條件地使用'std :: wstring'並忘記將MBCS存儲在'std :: string'中,否則切換到UTF-8而不是MBCS,因此不存在數據丟失的可能性(MBCS是沒有損失),然後在調用需要UTF-16的API函數時,在UTF-8和UTF-16之間進行轉換。 –
擔心在您擔心速度之前進行更正。堅持一種格式將簡化代碼,並使其更加簡單。 –
我的意見是,你的檢查和轉換功能將遠遠超過在任何地方使用寬字符串。 –