0

I want to download the file to current directory instead of "c://". How would that be done?

My code:

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();
}
4

1 回答 1

1

参考资料说明了URLDownloadToFile()这个szFileName参数(强调我的):

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

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

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

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

附带说明一下,您应该在使用的程序CoInitialize()的开头和CoUninitialize()结尾调用,URLDownloadToFile()因为它是一个 COM API。如果没有它,您可能会侥幸逃脱,但这纯粹是运气,并且可能停止在不同的 Windows 版本中工作。

于 2017-08-26T15:03:00.460 回答