关闭

文件夹病毒专杀简单实现

395人阅读 评论(0) 收藏 举报
分类:
#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;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5116次
    • 积分:130
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档