簡體   English   中英

LPCWSTR到代碼c ++ VS 2010中的字符串轉換問題

[英]LPCWSTR to string conversion issue in code c++ VS 2010

我正在嘗試查找具有特定名稱的文件,並在c ++中刪除它們,因為如果我給它直接桌面路徑L“ path //”,此代碼可以正常工作,但是由於用戶和系統不同,桌面路徑也不同,所以我在頂部要做的是獲取字符串變量中的桌面路徑並分配它,而不是直接路徑。

string desk=getenv("DESKTOP");


        WIN32_FIND_DATAW fd;
        HANDLE hFind = FindFirstFileW(desk, &fd);
        if (hFind != INVALID_HANDLE_VALUE)
        {
            do
            {
                DeleteFileW((wstring(desk) + fd.cFileName).c_str());
            } while (FindNextFileW(hFind, &fd));
            FindClose(hFind);
        }

我收到以下錯誤

錯誤4錯誤C2664:'FindFirstFileW':無法將參數1從'std :: string'轉換為'LPCWSTR'

我已經嘗試過使用wstring和wchar,但是它再次給出錯誤。 誰能幫我解決這個問題。 尋找代碼中的更正

Windows通常具有兩個版本的函數,一個A后綴通常是它接受字符,一個W后綴可以接受wchar_t,而沒有該后綴的結果通常是選擇任何字符集的宏。 通常,它們將接受的字符串類型是LPCWSTR(指向寬常量字符串的長指針)或LPCSTR(指向常量字符串的長指針)。

FindFirstFileW()的第一個參數采用LPCWSTR。

LPCWSTR是const wchar_t *的typedef。 您正在傳遞一個std :: string,所以它是錯誤的類型。

只要與字符串類型保持一致,請執行以下操作:

wstring desk = _wgetenv(L"DESKTOP");

string findDigitsInBinary(int A) {

    WIN32_FIND_DATAW fd;

    HANDLE hFind = FindFirstFileW(desk.c_str(), &fd); // First argument takes LPCWSTR

要么:

string desk = getenv("DESKTOP");

string findDigitsInBinary(int A) {

    WIN32_FIND_DATAA fd;

    HANDLE hFind = FindFirstFileA(desk.c_str(), &fd); // First arg takes LPCSTR

注意,在任何情況下都不傳遞字符串類,而是傳遞字符串保留的字符緩沖區。

后綴W和AI表示Wide和ANSI。

由於直接調用Win32函數,因此一致性建議使用GetEnvironmentVariableW而不是getenv DESKTOP變量的依賴已經非常特定於Windows。 這絕對不是可移植的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM