Я пытаюсь проверить путь к моим приложениям, и если он не указан, переместите его. Я чувствую, что мой код твердый, но он не работает должным образом.
TCHAR pCheck[MAX_PATH];
TCHAR xPath[MAX_PATH];
GetModuleFileName(NULL,xPath,MAX_PATH);
if(SHGetSpecialFolderPath(HWND_DESKTOP, pCheck, CSIDL_DESKTOP, FALSE)){
wcscat(pCheck,L"\\NewFile.exe");
MessageBox(NULL,pCheck,NULL,NULL);
MessageBox(NULL,xPath,NULL,NULL);
if(pCheck!=xPath){
CopyFile(xPath,pCheck,0);
ShellExecute(0,L"open",pCheck,NULL,NULL,SW_SHOW);
return 0;
}else{
MessageBox(NULL,L"New Location",NULL,NULL);
return 0;
}
}
Даже если файл находится в новом пути, он все равно приведет к pCheck! = XPath
Я никогда не получаю сообщение «Новое местоположение». Когда отображаются первые два сообщения, пути равны …
Вы просто сравниваете адреса массивов (которые, очевидно, никогда не совпадают). Если вы хотите сравнить две строки, содержащиеся в массивах, вы должны использовать _tcscmp();
if(_tcscmp(pCheck, xPath) != 0){
Ваш массив TChar распадается в указатель на первый символ. В настоящее время вы проверяете на равенство указателей, поэтому вы никогда не получите ПРАВДА.
использование strcmp
эквиваленты, для TChar, как _tcscmp
.
_tcscmp является макрос, который либо вызывает wcscmp
или же strcmp
в зависимости от типа персонажей.