C++调用MoveFile实现文件移动时自动补全目标文件名的方法
实现方案
核心实现逻辑如下:
- 首先修正输入变量类型:存储文件路径需要用
string类型,你示例中的int path_a是错误写法,无法存储字符串格式的路径 - 调用Windows内置API
PathFindFileNameA直接从完整源路径中提取文件名部分,比手动切割字符串兼容性更强,可处理各类合法Windows路径格式 - 拼接目标路径后调用
MoveFileA,增加返回值判断避免误报操作成功
注意事项
- 需要引入
<shlwapi.h>头文件,同时链接Shlwapi.lib库,代码中可以通过预编译指令自动完成链接,无需手动修改编译器配置 - 建议提前判断
C:\folder是否存在,不存在则自动创建,避免因目标目录不存在导致移动失败
完整可运行代码
#include <iostream> #include <string> #include <Windows.h> #include <shlwapi.h> #include <cstdlib> using namespace std; // 自动链接Shlwapi库,无需手动配置链接器 #pragma comment(lib, "Shlwapi.lib") int main() { // 提前创建目标目录,已存在时该调用也不会报错 CreateDirectoryA("C:\\folder", NULL); string srcPath; cout << "请输入源文件完整路径:" << endl; // 如果需要支持带空格的路径输入,将下行替换为 getline(cin, srcPath); cin >> srcPath; // 从源路径中提取纯文件名 LPCSTR fileName = PathFindFileNameA(srcPath.c_str()); // 拼接目标完整路径 string destPath = "C:\\folder\\" + string(fileName); // 执行移动操作,判断返回值 if (MoveFileA(srcPath.c_str(), destPath.c_str())) { cout << "Operation Successful" << endl; } else { cout << "操作失败,错误码:" << GetLastError() << endl; } cout << endl; system("pause"); return 0; }
补充说明
如果不想依赖Shlwapi库,也可以手动切割字符串提取文件名:查找源路径中最后一个\的位置,从该位置的下一位开始截取到末尾就是文件名,适配所有场景。
内容的提问来源于stack exchange,提问作者Misha
相关产品推荐
相关产品推荐

