在Windows下使用MFC/Win32 API进行文件夹内所有文件的复制操作,可以通过遍历目录中的文件并逐个复制来实现

系列文章目录

文章目录

前言

在Windows下使用MFC/Win32 API进行文件夹内所有文件的复制操作,可以通过遍历目录中的文件并逐个复制来实现。以下是一个简单的示例,代码设计用于递归复制整个目录结构,而您的需求是复制一个特定的文件(Game.locres)到另一个目录。当前代码尝试复制整个Game目录及其子目录,而不是单独的文件。因此,当尝试递归进入不存在的子目录时(例如Game\Game),程序会失败。

为了仅复制特定文件,您需要修改代码以直接处理文件而不是目录。以下是修改后的代码示例,它将只复制Game.locres文件到目标目录:

初始化变量
WIN32_FIND_DATA findData 存储查找结果的数据结构。
HANDLE hFind 存储查找句柄。
wchar_t szFullSrcPath[MAX_PATH] 和 wchar_t szFullDstPath[MAX_PATH] 分别用于构造完整的源路径和目标路径。
构建通配符搜索字符串
wcscpy_s(szFullSrcPath, pszSrcDir); 将源目录路径复制到 szFullSrcPath。
wcscat_s(szFullSrcPath, L"\*"); 在路径后面加上通配符 *,表示查找所有文件。
查找第一个文件
hFind = FindFirstFile(szFullSrcPath, &findData); 使用 FindFirstFile 函数查找第一个文件。
如果 hFind 返回 INVALID_HANDLE_VALUE,表示查找失败,直接返回 false。
遍历文件和目录
使用 do…while 循环遍历所有文件。
wcscmp 比较文件名,跳过当前目录 (.) 和父目录 (…)。
构造完整的源路径和目标路径。
如果是目录,则递归调用 CopyFolder 函数复制整个目录树。
如果是文件,则使用 SHFileOperation 函数复制单个文件。
FOF_NOCONFIRMATION 表示不提示用户确认,FOF_SILENT 表示静默操作。
关闭查找句柄
FindClose(hFind); 关闭查找句柄。
返回值
如果所有操作成功,返回 true;否则返回 false。

#include <windows.h>
#include <Shlobj.h>
#include <wchar.h>
#include <iostream> // 用于控制台输出

// 函数声明
bool CopyFolder(const wchar_t* pszSrcDir, const wchar_t* pszDstDir);

int wmain()
{
   
   
	//wchar_t szSrcDir[MAX_PATH];
	//wchar_t szDstDir[MAX_PATH];

	//// 使用常量路径代替输入
	//const wchar_t* pszSrcDir = L"E:\\soui\\LocationalTool\\Localization\\";
	//const wchar_t* pszDstDir = L"E:\\soui\\LocationalTool\\dest\\";

	//if (CopyFolder(pszSrcDir, pszDstDir))
	//	wprintf(L"Directory copied successfully.\n");
	//else
	//	wprintf(L"Failed to copy directory.\n");

	//return 0;
	const wchar_t* pszSrcFile = L"E:\\soui\\LocationalTool\\Localization\\Game\\en\\Game.locres";
	const wchar_t* pszDstDir = L"E:\\soui\\LocationalTool\\dest\\"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值