내 C++ 프로젝트에서 많은 유니 코드 파일 경로를 처리하고 있습니다. 나는 내 코드에서 체크를 수행한다. Multibyte String에 맞을만큼 충분히 괜찮 으면, 나는 보통 문자열 (std :: string) 변수로 유지한다. 문자열이 Multibyte에 맞지 않으면, 와이드 char 문자열.넓은 문자열 대 문자열, Windows C++의 성능에 영향을 줍니까
내 질문은 내가 wstrings ..로 완전히 경로를 사용할 수 있는지 여부입니다? 그것은 성능에 영향을 미칠 것인가, 나는 문자열 조작을해야하고, 파일을 열고, 만들고, 이름을 변경하고, wstring을 삭제해야한다. 그래서 오히려 그 멀티 바이트 또는 넓은 char 문자열을 검사, 나는 그것을 많이 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'에 모두 저장하는 것을 잊어 버리거나 MBCS 대신 UTF-8로 전환하여 데이터 손실 가능성을 없애야합니다 (MBCS는 손실없이) UTF-16을 필요로하는 API 함수를 호출 할 때 UTF-8과 UTF-16간에 변환 할 수 있습니다. –
속도에 대해 걱정하기 전에 문제를 수정하는 것에 대해 걱정할 필요가 있습니다. 하나의 형식을 고수하면 코드가 단순 해지며이를 수정하면 훨씬 간단 해집니다. –
제 생각에 당신의 점검과 변환 기능은 어디에서나 넓은 문자열을 사용하는 것보다 훨씬 비쌉니다. –