2016-01-21 48 views
0

我使用UrlToDownloadFile函數,但它不下載文件。否(使用VStudio 2012)UrlToDownloadFile函數沒有下載

在這裏,編譯器顯示錯誤代碼:

#include <Windows.h> 
#include "urlmon.h" 

#pragma lib "urlmon.lib" 

using namespace std; 

void dwFile(); 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    dwFile(); 
    return 0; 
} 

void dwFile() 
{ 
    LPCSTR url = ("http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf"); 
    LPCSTR fPath = ("C:\\Users\\Andyy\\Desktop\\test\\n3337.pdf"); 

    HRESULT URLDownloadToFile ((NULL, url, fPath, 0, NULL)); 
} 
+0

你的意思是'HRESULT hr = URLDownloadToFile(...)'? –

+0

HRESULT hr = URLDownloadToFile(NULL,url,fPath,0,NULL); 我早些時候做到了,但是我得到了url和fPath的錯誤,並說:LPCSTR與LPCWSTR類型不兼容。我不知道爲什麼,因爲在msdn中輸入LPCSTR。 – Andy

+0

'LPCTSTR'是一個指向'TCHAR *'字符串的'const'指針。當你爲Unicode編譯項目時,'TCHAR'映射到'wchar_t','URLDownloadToFile()'映射到'URLDownloadToFileW()'。當你爲MBCS編譯時,'TCHAR'映射到'char','URLDownloadToFile()'映射到'URLDownloadToFileA()'。要將字符串文字分配給「TCHAR *」字符串,您需要將其包裝在「TEXT()」宏中。 –

回答

0

您的代碼是沒有做任何錯誤處理,你的字符串處理是錯誤的。使用這個來代替:

#include <Windows.h> 
#include "urlmon.h" 

#pragma lib "urlmon.lib" 

using namespace std; 

void dwFile(); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    dwFile(); 
    return 0; 
} 

void dwFile() 
{ 
    LPCTSTR url = TEXT("http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf"); 
    LPCTSTR fPath = TEXT("C:\\Users\\Andyy\\Desktop\\test\\n3337.pdf"); 

    HRESULT hr = URLDownloadToFile (NULL, url, fPath, 0, NULL); 
    if (FAILED(hr)) 
    { 
     // do something ... 
    } 

    /* or more preffered: 

    LPCWSTR url = L"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf"; 
    LPCWSTR fPath = L"C:\\Users\\Andyy\\Desktop\\test\\n3337.pdf"); 

    HRESULT hr = URLDownloadToFileW (NULL, url, fPath, 0, NULL); 
    if (FAILED(hr)) 
    { 
     // do something ... 
    } 
    */ 
} 

請注意文檔中的以下評論:

URLDownloadToFile返回S_OK 即使不能創建的文件,下載被取消。如果szFileName參數包含文件路徑,請在調用URLDownloadToFile之前確保目標目錄存在。 爲了更好地控制下載及其進度,建議使用IBindStatusCallback接口

+0

感謝您的回答。我用你的示例包裝URL和fPath與TEXT()宏,我在兩個例子中說錯誤:錯誤2錯誤LNK2019:無法解析的外部符號_URLDownloadToFileW @ 20在函數中引用_wmain – Andy

+0

@安迪:您的項目需要鏈接到Urlmon .lib'來解決這個問題。 –

+0

「#pragma lib」urlmon.lib「'不包含urlmon.lib嗎? – Andy