#include <iostream>
#include <string>
#include <windows.h>
#include <tchar.h>
using namespace std;
//扫描到文件时调用的回调函数类型
typedef void (*ScanFileCallBack)(TCHAR *pFileName,PVOID pParameter);
//扫描到文件时调用的回调函数,这里可以充分的发挥聪明才智
void DealWithFile(TCHAR *pFileName,PVOID pParameter)
{
(*(int *)pParameter)++;
cout<<pFileName;
cout<<endl;
}
void ScanDirectory(TCHAR *pStrDirectory,ScanFileCallBack funcDoSomething,PVOID pParameter =NULL)
{
string direc[MAX_PATH];
string file[MAX_PATH];
int count=0;
int count1=0;
int flag=0;
if(pStrDirectory == NULL)
{
return ;
}
WIN32_FIND_DATA fData={0};
TCHAR tcDirectory[MAX_PATH]={0},tcScanFileType[MAX_PATH]={0};
int iLength =_tcslen(pStrDirectory);
if(iLength>MAX_PATH) //如果目录路径过长则失败
{
return ;
}
_tcscpy(tcScanFileType ,pStrDirectory); //保存扫描文件夹
if(_T('\\') == tcScanFileType[iLength - 1])
_tcscat(tcScanFileType,_T("*.*"));
else
_tcscat(tcScanFileType,_T("\\*.*")); //构造扫描文件类型名
HANDLE hFindHandle = FindFirstFile(tcScanFileType,&fData);
if(hFindHandle == INVALID_HANDLE_VALUE)
{
return ;
}
do
{
if(_T('.') == fData.cFileName[0])
{
// 跳过上层目录
continue;
}
_tcscpy(tcDirectory,pStrDirectory); //保存扫描文件夹
if('\\'!=tcDirectory[iLength -1])
_tcscat(tcDirectory,_T("\\"));
strcat(tcDirectory,fData.cFileName); //新文件名或子文件夹名
fData.dwFileAttributes &=FILE_ATTRIBUTE_DIRECTORY;
if(FILE_ATTRIBUTE_DIRECTORY == fData.dwFileAttributes) //判断是否是目录
{
direc[count++]=tcDirectory;
}
else
{
file[count1++]=tcDirectory;
}
} while (FindNextFile(hFindHandle,&fData));
for(int i=0;i<count;i++)
{
cout<<direc[i]<<endl;
}
cout<<"-------------------------------------------------------------"<<endl;
for(int j=0;j<count1;j++)
{
cout<<file[j]<<endl;
}
cout<<"---------------------------------------------------------------"<<endl;
for(i=0;i<count1;i++)
{
int n=file[i].find_last_of(".");
string str=file[i].substr(0,n);
for(j=0;j<count;j++)
{
if(str==direc[j])
{
char *p = (char *)file[i].c_str();
string cmd="attrib -h -a -s -r ";
cmd=cmd+direc[j];
char *pcmd=(char *)cmd.c_str();
WinExec(pcmd,SW_NORMAL);
DeleteFile(p);
break;
}
}
}
}
int main()
{
char disk[256];
int flag=0;
DWORD len=GetLogicalDriveStrings(sizeof(disk)/sizeof(char),disk);
for(char *pdisk=disk;*pdisk;pdisk+=strlen(pdisk)+1)
{
if(GetDriveType(pdisk)==DRIVE_REMOVABLE)
{
flag=1;
break;
}
}
if(flag == 1)
{
int iCount=0;
ScanDirectory(pdisk,DealWithFile,&iCount);
}
return 0;
}
#include <string>
#include <windows.h>
#include <tchar.h>
using namespace std;
//扫描到文件时调用的回调函数类型
typedef void (*ScanFileCallBack)(TCHAR *pFileName,PVOID pParameter);
//扫描到文件时调用的回调函数,这里可以充分的发挥聪明才智
void DealWithFile(TCHAR *pFileName,PVOID pParameter)
{
(*(int *)pParameter)++;
cout<<pFileName;
cout<<endl;
}
void ScanDirectory(TCHAR *pStrDirectory,ScanFileCallBack funcDoSomething,PVOID pParameter =NULL)
{
string direc[MAX_PATH];
string file[MAX_PATH];
int count=0;
int count1=0;
int flag=0;
if(pStrDirectory == NULL)
{
return ;
}
WIN32_FIND_DATA fData={0};
TCHAR tcDirectory[MAX_PATH]={0},tcScanFileType[MAX_PATH]={0};
int iLength =_tcslen(pStrDirectory);
if(iLength>MAX_PATH) //如果目录路径过长则失败
{
return ;
}
_tcscpy(tcScanFileType ,pStrDirectory); //保存扫描文件夹
if(_T('\\') == tcScanFileType[iLength - 1])
_tcscat(tcScanFileType,_T("*.*"));
else
_tcscat(tcScanFileType,_T("\\*.*")); //构造扫描文件类型名
HANDLE hFindHandle = FindFirstFile(tcScanFileType,&fData);
if(hFindHandle == INVALID_HANDLE_VALUE)
{
return ;
}
do
{
if(_T('.') == fData.cFileName[0])
{
// 跳过上层目录
continue;
}
_tcscpy(tcDirectory,pStrDirectory); //保存扫描文件夹
if('\\'!=tcDirectory[iLength -1])
_tcscat(tcDirectory,_T("\\"));
strcat(tcDirectory,fData.cFileName); //新文件名或子文件夹名
fData.dwFileAttributes &=FILE_ATTRIBUTE_DIRECTORY;
if(FILE_ATTRIBUTE_DIRECTORY == fData.dwFileAttributes) //判断是否是目录
{
direc[count++]=tcDirectory;
}
else
{
file[count1++]=tcDirectory;
}
} while (FindNextFile(hFindHandle,&fData));
for(int i=0;i<count;i++)
{
cout<<direc[i]<<endl;
}
cout<<"-------------------------------------------------------------"<<endl;
for(int j=0;j<count1;j++)
{
cout<<file[j]<<endl;
}
cout<<"---------------------------------------------------------------"<<endl;
for(i=0;i<count1;i++)
{
int n=file[i].find_last_of(".");
string str=file[i].substr(0,n);
for(j=0;j<count;j++)
{
if(str==direc[j])
{
char *p = (char *)file[i].c_str();
string cmd="attrib -h -a -s -r ";
cmd=cmd+direc[j];
char *pcmd=(char *)cmd.c_str();
WinExec(pcmd,SW_NORMAL);
DeleteFile(p);
break;
}
}
}
}
int main()
{
char disk[256];
int flag=0;
DWORD len=GetLogicalDriveStrings(sizeof(disk)/sizeof(char),disk);
for(char *pdisk=disk;*pdisk;pdisk+=strlen(pdisk)+1)
{
if(GetDriveType(pdisk)==DRIVE_REMOVABLE)
{
flag=1;
break;
}
}
if(flag == 1)
{
int iCount=0;
ScanDirectory(pdisk,DealWithFile,&iCount);
}
return 0;
}