文件夹病毒专杀简单实现

来源:互联网 发布:linux 编译python模块 编辑:程序博客网 时间:2024/05/17 09:23
#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;
}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 C语言实验题――分数序列 C语言实验题――数组逆序 C语言实验题――一元二次方程 C语言实验题――某年某月的天数 相邻最大数 Picture 羊村运动会――撑杆跳高 字符矩阵排序 1535:找规律填数字 idm6.38 C语言实验题――圆周率 缺陷检测 成都瓶儿 谭松韵 桥本 YouTube、Google+、Facebook、Twitter、维基百科最全hosts C语言实验题――拍皮球 求奇数的乘积 C语言实验题――字符编码 intellijlicense andriod导航栏 mfc文件上传下载 Eclipse4.8中搭建Android开发环境 1178:C语言实验题――单词统计 现在小明决定实现一个类似malloc的内存分配系统,具体来说,他需要连续处理若干申请内存的请求,这个 给定某二叉树的前序序列和中序序列,输出该二叉树的后序序列。(输入的前序遍历和中序遍历的结果中都不含重 vibe twitter 幼呦 fasttunnel 一叫三吱 浩君恋母 C语言实现朴素贝叶斯 shadowsocks服务 CCF201509-2日期计算 song:平面上若干个点,求任意两点间的最长距离 求n阶乘(1<=n<=10000) 【问题描述】计算一个班级N个学生三门课的各门课平均分,三门课总分,并输出成绩最高者的信息【输入形式】 NOD32分享区 舞蹈生 busfan