2017-08-26 150 views
0

我想將文件下載到當前目錄而不是「c://」。這將如何完成?下載到當前目錄

我的代碼:

using namespace std; 
#pragma comment(lib, "urlmon.lib") 

int main() 
{ 
    cout << "downloading update"; 
    HRESULT hr = URLDownloadToFile(NULL, _T("http://download.piriform.com/ccsetup233.exe"), _T("c://ccsetup233.exe"), 0, NULL); 
    FreeConsole(); 
} 
+0

我相信你只需要將「c://ccsetup233.exe」更改爲「ccsetup233.exe」,不需要路徑名稱 – Amadeus

+1

只指定文件名,不包含路徑。 '_T(「ccsetup233.exe」)' –

+0

工作。謝謝。 –

回答

1

URLDownloadToFile()的參考表示,這對szFileName參數(重點煤礦):

一個指針,指向包含名稱或完整路徑一個字符串值爲要下載的文件創建 文件。如果szFileName包含路徑,則目標目錄必須已經存在。

如果您只傳遞文件名而不是完整路徑,它將下載到當前目錄。這沒有明確記錄,但它是Windows API的正常工作方式。

雖然我不會有任何機會,在調用URLDownloadToFile()時的當前目錄是與它在程序的開始時相同。任何代碼可能會調用SetCurrentDirectory()將當前目錄更改爲其他內容。

爲了使代碼更加健壯,我只會在程序開始時調用GetCurrentDirectory()一次,並將路徑存儲在變量中。在致電URLDownloadToFile()之前,我會將文件名附加到該路徑並傳遞參數szFileName的完整路徑。

在附註上,您應該在開始時調用CoInitialize(),在使用URLDownloadToFile()的程序結束時調用CoUninitialize(),因爲它是COM API。沒有這些,你可能會逃脫,但這是純粹的運氣,可能會停止在不同的Windows版本中工作。