下载到当前目录

时间:2017-08-26 03:31:56

标签: c++ winapi urlmon

我想将文件下载到当前目录而不是“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();
}

1 个答案:

答案 0 :(得分:1)

URLDownloadToFile()的引用说明szFileName参数(强调我的):

  

指向包含名称或完整路径的字符串值的指针   要为下载创建的文件。如果szFileName包含路径,则   目标目录必须已存在。

如果只传递文件名而不是完整路径,则会下载到当前目录。这没有明确记录,但它是Windows API工作的常规方式。

虽然我在调用URLDownloadToFile()时当前目录与程序开始时的当前目录不同。任何代码都可能调用SetCurrentDirectory()来将当前目录更改为其他目录。

为了使代码更健壮,我只在程序开始时调用GetCurrentDirectory()一次,并将路径存储在变量中。在调用URLDownloadToFile()之前,我会将文件名附加到该路径并传递szFileName参数的完整路径。

在旁注中,您应该在开始时调用CoInitialize(),在使用CoUninitialize()的程序结​​束时调用URLDownloadToFile(),因为它是COM API。没有它你可能会离开,但那将是纯粹的运气,可能会停止在不同的Windows版本中工作。