C++中URLDownloadToFile函数无法下载文件问题求助
问题:调用URLDownloadToFile后提示下载成功但找不到文件
我是C++新手,正在开发一款应用,菜单中有下载Apple Cleaner清理系统的选项。使用以下代码调用URLDownloadToFile函数下载时:
#pragma once #include <iostream> #include <stdio.h> #include <Windows.h> #include <string> #include <tchar.h> #include <urlmon.h> #pragma comment(lib, "urlmon.lib") #pragma comment(lib, "wininet.lib") void Clean() { string cleaning = "Opening Apple Cleaner..."; int f = 0; while (cleaning[f] != '\0') { cout << cleaning[f]; Sleep(10); f++; }; int choice2 = 0; const wchar_t* URL = L"https://cdn.discordapp.com/attachments/1072743268678381651/1099243281474387979/applecleaner.exe"; const wchar_t* Path = L"C:\\Windows\\System\\applecleaner.exe"; if (S_OK == URLDownloadToFile(NULL, URL, Path, 0, NULL)) { cout << "\n\nApple Cleaner has been downloaded\n" << endl; } system("pause"); system("cls"); }程序打印了“Apple Cleaner has been downloaded”,但在指定路径中找不到下载的文件。我尝试过更换URL、修改路径、换用不同解决方案工程、改用string类型存储路径和URL,均未解决问题,恳请各位提供帮助。
可能的解决方案
- 检查系统目录权限:
C:\Windows\System是系统保护目录,普通权限程序无法直接写入。先尝试将下载路径改为用户可写目录(比如L"C:\\Users\\你的用户名\\Desktop\\applecleaner.exe"),如果能正常下载,说明是权限问题。此时要么给程序添加管理员权限,要么更换非系统目录作为下载路径。 - 验证路径重定向:如果是32位程序运行在64位系统上,写入
C:\Windows\System会被系统自动重定向到C:\Windows\SysWOW64,可以去该目录下查找文件。 - 添加错误排查逻辑:即使
URLDownloadToFile返回S_OK,也可以调用GetLastError()获取更详细的错误信息;或者使用函数的回调参数(第四个参数)跟踪下载过程,确认文件实际写入位置。 - 统一字符集设置:代码中混用了窄字符
string和宽字符wchar_t,建议将项目字符集设置为Unicode字符集(VS项目属性-常规中配置),同时宽字符输出使用wcout替代cout,避免字符编码冲突导致的隐性问题。
内容的提问来源于stack exchange,提问作者Zrylx
相关产品推荐
相关产品推荐

