You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:15:03