2

这可能是一个新手问题,但我不太擅长 C++,而且还是一个早期初学者。我的问题是如何从字符中删除 bk 任何尾随反斜杠:

extern "C" UINT __stdcall DeleteTrailingBackslash(MSIHANDLE hInstall)
{
    HRESULT hr = S_OK;
    UINT er = ERROR_SUCCESS;
    LPWSTR szValueBuf = NULL;
    char szInstallPath[MAX_PATH];

    hr = WcaInitialize(hInstall, "DeleteTrailingBackslash");
    ExitOnFailure(hr, "Failed to initialize");

    WcaLog(LOGMSG_STANDARD, "Initialized.");

    hr = WcaGetProperty(L"INSTALLLOCATION",&szValueBuf);
    ExitOnFailure(hr, "failed to get Install Location");

    wcstombs(szInstallPath, szValueBuf, 260);

    // I would like to strip back the trailing backslashes
    // and re add the property to my MSI
    hr = MsiSetProperty(hInstall, "INSTALLLOCATION",  szInstallPath);
    ExitOnFailure(hr, "failed to set the install location");

    LExit:
    er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
    return WcaFinalize(er);
}

szInstallPath可能没有,一个或两个反斜杠,如果有的话,我需要删除反斜杠。任何人都可以为我指出正确的方向,以获得好的网站教程或任何东西吗?

谢谢

4

2 回答 2

6

这是使用 std::string 的 C++ 解决方案

...

std::string stdInstallPath = szInstallPath;

while(stdInstallPath.rbegin() != stdInstallPath.rend() && *stdInstallPath.rbegin() == '\\')
    stdInstallPath.pop_back();

hr = MsiSetProperty(hInstall, "INSTALLLOCATION",  stdInstallPath.c_str());

...

这会查看字符串中的最后一个字符,如果它是反斜杠则将其删除,并一直持续到最后一个字符不是反斜杠。

于 2013-02-14T15:22:14.497 回答
2

这样的事情可能就足够了:

const size_t len = strlen(szInstallPath);
if( szInstallPath[len-1] == '\\' || szInstallPath[len-1] == '/' )
{
    // Terminate the string earlier
    szInstallPath[len-1] = 0;
}
于 2013-02-14T15:24:24.720 回答