遍历目录的子文件后怎么拷贝文件

baidu_38411250 2018-10-16 08:40:43
用的是VC6.0(控制台的,不是MFC的)源码是网上找的,希望能帮忙改下代码,也可以按要求提供下完整源码,个人是小白,做个安静的伸手党,求:将D:\a.txt拷贝到D盘的a文件夹下的多个子文件夹下(子文件夹名称不知道,所以采用遍历的方式查看是否有a.txt文件,如果有则替换掉)源码如下:
#include <io.h>
#include <iostream>
#include <vector>
using namespace std;

void getFiles(string path, vector<string>& files)
{
//文件句柄
long hFile = 0;
//文件信息,声明一个存储文件信息的结构体
struct _finddata_t fileinfo;
string p;//字符串,存放路径
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)//若查找成功,则进入
{
do
{
//如果是目录,迭代之(即文件夹内还有文件夹)
if ((fileinfo.attrib & _A_SUBDIR))
{
//文件名不等于"."&&文件名不等于".."
//.表示当前目录
//..表示当前目录的父目录
//判断时,两者都要忽略,不然就无限递归跳不出去了!
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
}
//如果不是,加入列表
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0);
//_findclose函数结束查找
_findclose(hFile);
}
}


int main(){
char * filePath = "D:\\a";//自己设置目录
vector<string> files;

////获取该路径下的所有文件
getFiles(filePath, files);

char str[30];
int size = files.size();
for (int i = 0; i < size; i++)
{
cout << files[i].c_str() << endl;
}
}
...全文
127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-10-17
  • 打赏
  • 举报
回复
这活适合用bat干。
schlafenhamster 2018-10-17
  • 打赏
  • 举报
回复
"将D:\a.txt拷贝到D盘的a文件夹下的多个子文件夹下(子文件夹名称不知道,所以采用遍历的方式查看是否有a.txt文件,如果有则替换掉)"
"拷贝 " 操作 : 没有 就 复制 ,有 则 问 是否 覆盖 。 你的要求 是
如果有则替换掉,( 覆盖 ), 无 怎么说 ?
zgl7903 2018-10-17
  • 打赏
  • 举报
回复


#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <io.h>
#include <shlwapi.h>

#pragma comment(lib, "shlwapi")

//搜索子目录
int CopyFile2AllSubDir(LPCTSTR szRoot, LPCTSTR szSrcFile)
{
int iRet = 0;
HANDLE hFound;
BOOL bWorking;
TCHAR szPath[MAX_PATH + 1];
TCHAR szFind[MAX_PATH + 1];
TCHAR szFileName[MAX_PATH + 1];
TCHAR szDstFile[MAX_PATH + 1];
WIN32_FIND_DATA fdData;

//源文件名
_tcscpy_s(szFileName, PathFindFileName(szSrcFile));

//搜索路径
_tcscpy_s(szFind, szRoot);
PathAppend(szFind, _T("*.*"));

//开始搜索
hFound = FindFirstFile(szFind, &fdData);
bWorking = hFound != INVALID_HANDLE_VALUE;

while(bWorking)
{
//构造出全路径
_tcscpy_s(szPath, szRoot);
PathAppend(szPath, fdData.cFileName);

if(fdData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //目录
{
if(0
|| _tcscmp(fdData.cFileName, _T(".")) == 0
|| _tcscmp(fdData.cFileName, _T("..")) == 0
|| 0)
{
//. ..
}
else //子文件夹
{
CopyFile2AllSubDir(szPath, szSrcFile);

//构造目标文件名
_tcscpy_s(szDstFile, szPath);
PathAppend(szDstFile, szFileName);
//拷贝文件
if(CopyFile(szSrcFile, szDstFile, FALSE))
{
iRet ++;
}
}
}
else //文件
{
}

//搜索下个文件
bWorking = FindNextFile(hFound, &fdData);
}

//结束清理
if(hFound != INVALID_HANDLE_VALUE)
{
FindClose(hFound);
}

return iRet;
}

int main(int argc, char* argv[])
{
int iCopy = CopyFile2AllSubDir(_T("E:\\TEMP"), _T("C:\\test.bin"));

printf("Total copy %d files!\n", iCopy);
return 0;
}


Eleven 2018-10-17
  • 打赏
  • 举报
回复
直接用SHFileOperation()可能会更简单一点~
baidu_38411250 2018-10-17
  • 打赏
  • 举报
回复
我这边是网吧的,开机后会生成广告,广告的格式是html,并且目录是在一个系统目录下,而子文件夹的名字是随机性的,html是固定的,所以需要在电脑开机后替换,等替换后主程序调用的就是替换后的html,不知道这么说理解否,bat和易语言都可以实现,但喜欢用c++,而功能上对于子文件夹随机名字的我实现不了,所以钻了牛角尖

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧