A文件夹文件 - B文件夹文件 = C 文件夹文件

本文介绍了一种批量处理和复制文件的方法,包括文件搜索、筛选、复制到指定目录,并跳过已存在的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef UNICODE
#define UNICODE
#endif
#include"io.h"
#include<windows.h>
#ifdef _WINDOWS_
#undef _WINDOWS_
#endif
#include<AFX.h>
#include<string>
#include<iostream>
#include<vector>
#include<set>
#include<fstream>
using namespace std;
const int STR_MAX_LEN = 1000;


void getFiles( wstring path, vector<wstring>& files )
{
//文件句柄
long   hFile   =   0;
//文件信息
struct _wfinddata_t fileinfo;
wstring p;
if((hFile = _wfindfirst(p.assign(path).append(L"\\*").c_str(),&fileinfo)) !=  -1)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if((fileinfo.attrib &  _A_SUBDIR))
{
if(wcscmp(fileinfo.name,L".") != 0  &&  wcscmp(fileinfo.name,L"..") != 0)
getFiles( p.assign(path).append(L"\\").append((wchar_t *)fileinfo.name), files );


}
else
{
files.push_back(p.assign(path).append(L"\\").append((wchar_t *)fileinfo.name) );
}
}while(_wfindnext(hFile, &fileinfo)  == 0);
_findclose(hFile);
}
}




int main(int argc, char *argv[])
{
int i,j;
//wchar_t filePathA[STR_MAX_LEN] ; //= "..\\A";
//char filePathA[STR_MAX_LEN] ;
wchar_t *filePathA = L"3";
//wcscpy(filePathA,(wchar_t *)argv[1]);
//strcpy(filePathA, argv[1]);
//LPCWSTR pathA = (LPCWSTR)filePathA;//_T("D:\\tool\\VS2012test\\txtFiles");
wchar_t *filePathB = L"33";
//char filePathB[STR_MAX_LEN] ;
//wchar_t filePathB[STR_MAX_LEN] ;
//wcscpy(filePathB, (wchar_t *)argv[2]);//= "..\\B";
//strcpy(filePathB, argv[2]);


//wchar_t pathc[STR_MAX_LEN];
//char pathc[STR_MAX_LEN];
//wcscpy(pathc, (wchar_t *)argv[3]);
//strcpy(pathc,argv[3]);
//cout<< filePathA <<' '<<filePathB << ' ' << pathc <<endl;
wchar_t *pathc = L"3zh";
wstring pathC((wchar_t *)pathc);
// char * finalTxt = "D:\\tool\\VS2012test\\C.txt";
vector<wstring> filesA;  
vector<wstring> filesB;
set<wstring> setB;
getFiles((wchar_t *)filePathA, filesA ); 
getFiles((wchar_t *)filePathB, filesB );
//cout<<"size:  "<<filesA.size()<< "  "<<filesB.size() <<endl;
for(i = 0; i != filesB.size(); i++)
{
//cout<<"==> " << filesB[i].substr(strlen(filePathB) + 1)<<endl;
setB.insert(filesB[i].substr(wcslen((wchar_t *)filePathB) + 1));
}
//cout<<"setB :  "<<setB.size()<<endl;
int k = 0, kk = 0 , kkk = 0;
for(i = 0; i< filesA.size(); i++)
{
//cout<<"-> "<<filesA[i]<<endl;
kkk ++;
wstring Aname = filesA[i].substr(wcslen((wchar_t *)filePathA) + 1); 
if(setB.find(Aname) == setB.end())
{
k++;
//int m = MoveFile((LPCSTR)filesA[i].c_str(), (LPCSTR)pathC.append("\\").append(Aname).c_str()); //剪切
int m = CopyFile((LPCWSTR)filesA[i].c_str(), (LPCWSTR)(pathC + L"\\" + Aname).c_str(),true);
if(m==0)
{
kk++;
//cout<<Aname.c_str()<<endl;
}
//cout<<m<<endl;
}
}
cout<<"k :  "<<k<<"   "<<kk << "   " << kkk << endl;
system("pause");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值