5

我正在尝试检查我的应用程序路径,如果它不是指定路径,则移动它。我觉得我的代码很可靠,但它不能正常工作。

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

我从来没有收到“新位置”消息框。当显示前两个消息框时,路径是相等的......

4

2 回答 2

10

您只是在比较数组的地址(显然它们永远不会相同)。如果要比较数组中保存的两个字符串,则应使用_tcscmp();

if(_tcscmp(pCheck, xPath) != 0){ 
于 2012-11-10T16:48:25.593 回答
3

您的 TChar 数组衰减为指向第一个字符的指针。您当前正在检查指针是否相等,这就是您永远不会得到TRUE的原因。

对于 TChar,使用strcmp等价物,例如_tcscmp.

_tcscmp 是一个,它可以调用wcscmpstrcmp取决于字符的类型。

于 2012-11-10T16:48:52.357 回答