copy指定目录下包括子目录中所有的文件

时间:2023-03-08 16:36:53
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
DWORD EnumerateFileInDrectory(LPSTR szPath)
{
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
CHAR szFilePath[MAX_PATH];
CHAR myFilePath[MAX_PATH];
CHAR copy_to_FilePath[MAX_PATH]="要copy到的绝对路径";
CHAR new_FileName[MAX_PATH];
//构造代表子目录和文件夹路径的字符串,使用通配符“*”
lstrcpy(szFilePath, szPath);
lstrcpy(myFilePath,szPath);
//注释的代码可以用于查找所有以“.txt结尾”的文件。
//lstrcat(szFilePath, "\\*.txt");
lstrcat(szFilePath, "\\*"); //查找第一个文件/目录,获得查找句柄
hListFile = FindFirstFile(szFilePath,&FindFileData);
//判断句柄
if(hListFile==INVALID_HANDLE_VALUE)
{
printf("错误:%d",GetLastError());
return 1;
}
else
{
do
{
/* 如果不想显示代表本级目录和上级目录的“.”和“..”,
可以使用注释部分的代码过滤。 */
if(lstrcmp(FindFileData.cFileName,TEXT("."))==0||
lstrcmp(FindFileData.cFileName,TEXT(".."))==0)
{
continue;
} if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
printf("%s\t\t",FindFileData.cFileName);
printf("<DIR> \n ");
lstrcat(myFilePath, "\\");
lstrcat(myFilePath, FindFileData.cFileName);
cout<<"file path"<<myFilePath<<endl;
EnumerateFileInDrectory(myFilePath);
memset(myFilePath,0,MAX_PATH);
lstrcpy(myFilePath,szPath);
}
else
{
cout<<"file name"<<FindFileData.cFileName<<endl;
lstrcat(myFilePath,"\\");
lstrcat(myFilePath,FindFileData.cFileName); memset(new_FileName,0,MAX_PATH);
lstrcpy(new_FileName,copy_to_FilePath);
lstrcat(new_FileName,FindFileData.cFileName);
CopyFile(myFilePath,new_FileName,FALSE);
memset(myFilePath,0,MAX_PATH);
lstrcpy(myFilePath,szPath);
}
printf("\n");
}
while(FindNextFile(hListFile, &FindFileData));
}
return 0;
}
int main()
{
CCHAR dir[MAX_PATH]="从哪个目录开始copy";
EnumerateFileInDrectory(dir);
return 0;
}

 这段代码的主要功能是,将指定目录中的所有文件复制到知道那个的文件中,包括目录中子目录下的文件。