[英]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.