⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myfilefind.cpp

📁 对当前目录下的文件进行加密对指定的目录进行监控,对里面的文件进行实时加密,双击时进行实时解密操作
💻 CPP
字号:
#include "StdAfx.h"
#include ".\myfilefind.h"
#include <direct.h> 
#include <io.h> 

typedef struct _scanThread
{
    CMyFileFind * pThis;                 //this 指针
    char pszDir[_MAX_PATH];              //扫描的目录
	int dir;
}ScanThread,*PScanThread; 

typedef struct _OutThreadStruct
{
    CMyFileFind * pThis;                 //this指针
    CMyListCtrl * pDirList1;             //输出到链表目录一文件概况
    CMyListCtrl * pDirList2;             //输出到链表目录二文件概况
	int type;                            //输出的类型
}OutThread,*POutThread;

CMyFileFind::CMyFileFind(void)
{

	m_hScanDir1=NULL;                    //扫描目录一的线程句柄
    m_hScanDir2=NULL;                    //扫描目录二的线程句柄
    m_hOut=NULL;                         //向面板上输出数据的句柄
}

CMyFileFind::~CMyFileFind(void)
{
	//PreFreeList(1);
   // PreFreeList(2);
}

void CMyFileFind::Search_Directory(char * szFileName,CString szDir,int dir)
{
	i=0;

	if(!::SetCurrentDirectory(szDir))
	{
		AfxMessageBox("设置目录失败,请确定目录是否存在或者目录后是否有/");
	}

	CFileFind fileFind;
	CTime time;
	BOOL bContinue;
	bContinue=fileFind.FindFile("*.*");

	while(bContinue)
	{
		bContinue=fileFind.FindNextFile();
		if(fileFind.IsHidden())continue;


		::GetCurrentDirectory(MAX_PATH,fileDir);
		//strPath=fileFind.GetFilePath();
        strPath.Format("%s",fileDir);
		strName=fileFind.GetFileName();
		//strPath.TrimRight(strName);

		fileFind.GetLastWriteTime(time);
		strWTime=time.Format("%Y年%m月%d日  %H:%M:%S");

		fileFind.GetCreationTime(time);
		strCTime=time.Format("%Y年%m月%d日  %H:%M:%S");

		fileFind.GetLastAccessTime(time);
		strATime=time.Format("%Y年%m月%d日  %H:%M:%S");
        

		if(fileFind.IsDirectory())
		{    
			i++;
			if(i==3)
			{
				::GetCurrentDirectory(MAX_PATH,fileDir);
				// fileFind.GetFilePath()
				Search_Directory("*.*",fileFind.GetFilePath(),dir);
				strCurr.Format("%s",fileDir);
				if( !::SetCurrentDirectory(strCurr))
					AfxMessageBox("设置目录失败,请确定目录格式是否正确");

			}
		}
		else
		{
			if(dir==1)
			{
				//按查看两目录所有文件按纽执行输出到面板的函数
				m_pMyListCtrl1->WriteListCtrl(strPath,strName,strCTime,strATime,strWTime);

				//向目录一的相关链表中插入数
				m_OneArray.Add(strPath);
                m_OneArray.Add(strName);
				m_OneArray.Add(strCTime);
				m_OneArray.Add(strATime);
				m_OneArray.Add(strWTime);
			}
			else if(dir==2)
			{
				//按查看两目录所有文件按纽执行输出到面板的函数
				m_pMyListCtrl2->WriteListCtrl(strPath,strName,strCTime,strATime,strWTime);

				//向目录二的相关链表中插入数据
				m_TwoArray.Add(strPath);
                m_TwoArray.Add(strName);
				m_TwoArray.Add(strCTime);
				m_TwoArray.Add(strATime);
				m_TwoArray.Add(strWTime);
			}
		}
	}
	
}


//查看目录一的线程
DWORD WINAPI CMyFileFind::_ScanThread(LPVOID lpParameter)
{
   ScanThread *pScan=(ScanThread *)lpParameter;
   pScan->pThis->Search_Directory("*.*",pScan->pszDir,pScan->dir);
   if(pScan->dir==1)
   {
	 //  pScan->pThis->mutex[0]=1;
   }
   else
   {
	  // pScan->pThis->mutex[1]=1;
   }
   return 0;
}
//把结果输出到面板上的线程
DWORD WINAPI CMyFileFind::_OutThread(LPVOID lpParameter)
{
   return 0;
}

void CMyFileFind::StartScan(CString strDir1,
							CString strDir2,                      //查找的目录二
							CMyListCtrl *pMyListCtrl1,            //把相关信息插入链表一
							CMyListCtrl *pMyListCtrl2,            //把相关信息插入链表二
							CButton *pViewBtn,                    //查看不同的按纽
							CButton *pCopyBtn)                    //复制最新文件的按纽
{
	m_pMyListCtrl1=pMyListCtrl1;
    m_pMyListCtrl2=pMyListCtrl2;

	m_OneArray.RemoveAll();
	m_TwoArray.RemoveAll();

	m_pMyListCtrl1->DeleteAllItems();
	m_pMyListCtrl2->DeleteAllItems();

	m_pViewBtn=pViewBtn;
	m_pCopyBtn=pCopyBtn;
		
    AfxMessageBox(strDir1);
	AfxMessageBox(strDir2);
    Search_Directory("*.*",strDir1,1);
	Search_Directory("*.*",strDir2,2);
}
//显示出不同
void CMyFileFind::ViewDiffer(int viewType)            //不同的方式
{

	int i=0;
	int j=0;
    m_pMyListCtrl1->DeleteAllItems();
	m_pMyListCtrl2->DeleteAllItems();
	
    switch(viewType)
	{
	case 0://根据名字
        
        for(i=1;i<m_OneArray.GetCount();i=i+5)        //从目录一中依次输出目录二中没有的文件
		{
			for(j=1;j<m_TwoArray.GetCount();j=j+5)
			{
                if(m_OneArray.GetAt(i).Compare(m_TwoArray.GetAt(j))==0)
					break;
			}
			if(j>=m_TwoArray.GetCount())
			{
                m_pMyListCtrl1->WriteListCtrl(m_OneArray.GetAt(i-1),
					m_OneArray.GetAt(i),m_OneArray.GetAt(i+1),m_OneArray.GetAt(i+2),m_OneArray.GetAt(i+3));
			}
		}
         for(i=1;i<m_TwoArray.GetCount();i=i+5)      //从目录二中依次输出目录一中没有的文件
		{
			for(j=1;j<m_OneArray.GetCount();j=j+5)
			{
                if(m_TwoArray.GetAt(i).Compare(m_OneArray.GetAt(j))==0)
					break;
			}
			if(j>=m_OneArray.GetCount())
			{
                m_pMyListCtrl2->WriteListCtrl(m_TwoArray.GetAt(i-1),
					m_TwoArray.GetAt(i),m_TwoArray.GetAt(i+1),m_TwoArray.GetAt(i+2),m_TwoArray.GetAt(i+3));
			}
		}
		break;
	case 1://根据创建时间
		for(i=2;i<m_OneArray.GetCount();i=i+5)
		{
			for(j=2;j<m_TwoArray.GetCount();j=j+5)
			{
				if(m_OneArray.GetAt(i).Compare(m_TwoArray.GetAt(j))==0)
					break;
			}
			if(j>=m_TwoArray.GetCount())
			{
				m_pMyListCtrl1->WriteListCtrl(m_OneArray.GetAt(i-2),
					m_OneArray.GetAt(i-1),m_OneArray.GetAt(i),m_OneArray.GetAt(i+1),m_OneArray.GetAt(i+2));
			}
		}
		for( i=2;i<m_TwoArray.GetCount();i=i+5)
		{
			for(j=2;j<m_OneArray.GetCount();j=j+5)
			{
				if(m_TwoArray.GetAt(i).Compare(m_OneArray.GetAt(j))==0)
					break;
			}
			if(j>=m_OneArray.GetCount())
			{
				m_pMyListCtrl2->WriteListCtrl(m_TwoArray.GetAt(i-2),
					m_TwoArray.GetAt(i-1),m_TwoArray.GetAt(i),m_TwoArray.GetAt(i+1),m_TwoArray.GetAt(i+2));
			}
		}

		break;
	case 2://根据访问时间

		for(i=3;i<m_OneArray.GetCount();i=i+5)
		{
			for(j=3;j<m_TwoArray.GetCount();j=j+5)
			{
				if(m_OneArray.GetAt(i).Compare(m_TwoArray.GetAt(j))==0)
					break;
			}
			if(j>=m_TwoArray.GetCount())
			{
				m_pMyListCtrl1->WriteListCtrl(m_OneArray.GetAt(i-3),
					m_OneArray.GetAt(i-2),m_OneArray.GetAt(i-1),m_OneArray.GetAt(i),m_OneArray.GetAt(i+1));
			}
		}
		for( i=3;i<m_TwoArray.GetCount();i=i+5)
		{
			for(j=3;j<m_OneArray.GetCount();j=j+5)
			{
				if(m_TwoArray.GetAt(i).Compare(m_OneArray.GetAt(j))==0)
					break;
			}
			if(j>=m_OneArray.GetCount())
			{
				m_pMyListCtrl2->WriteListCtrl(m_TwoArray.GetAt(i-3),
					m_TwoArray.GetAt(i-2),m_TwoArray.GetAt(i-1),m_TwoArray.GetAt(i),m_TwoArray.GetAt(i+1));
			}
		}
		break;
	case 3://根据修改时间

		for(i=4;i<m_OneArray.GetCount()-5;i=i+5)
		{
			for(j=4;j<m_TwoArray.GetCount();j=j+5)
			{
				if(m_OneArray.GetAt(i).Compare(m_TwoArray.GetAt(j))==0)
					break;
			}
			if(j>=m_TwoArray.GetCount())
			{
				m_pMyListCtrl1->WriteListCtrl(m_OneArray.GetAt(i-4),
					m_OneArray.GetAt(i-3),m_OneArray.GetAt(i-2),m_OneArray.GetAt(i+1),m_OneArray.GetAt(i));
			}
		}
		i=4;
		j=4;
		for(i=4;i<m_TwoArray.GetCount();i=i+5)
		{
			for(j=4;j<m_OneArray.GetCount();j=j+5)
			{
				if(m_TwoArray.GetAt(i).Compare(m_OneArray.GetAt(j))==0)
					break;
			}
			if(j>=m_OneArray.GetCount())
			{
				m_pMyListCtrl2->WriteListCtrl(m_TwoArray.GetAt(i-4),
					m_TwoArray.GetAt(i-3),m_TwoArray.GetAt(i-2),m_TwoArray.GetAt(i-1),m_TwoArray.GetAt(i));
			}
		}
		break;
	}
}
//拷贝不同的文件                          
void CMyFileFind::CopyNewFile(int copyType)           //不同的方式
{
	CString strMax;
	int i=0;
	int max1=0;
	int max2=0;
    switch(copyType)
	{
	case 1://拷贝创建时间最新的
		max1=2;
		strMax=m_OneArray.GetAt(2);
        for(i=2;i<m_OneArray.GetCount();i+=5)                //查找目录一中最新的文件
		{
            if(m_OneArray.GetAt(i).Compare(strMax)>0)
			{
				strMax=m_OneArray.GetAt(i);
				max1=i;
			}
		}
		max2=2;	
		strMax=m_TwoArray.GetAt(2);
        for(i=2;i<m_TwoArray.GetCount();i+=5)                //查找目录二中最新的文件
		{
           if(m_TwoArray.GetAt(i).Compare(strMax)>0)
		   {
			   strMax=m_TwoArray.GetAt(i);
				max2=i;
		   }
		}
		if(m_OneArray.GetAt(max1).Compare(m_TwoArray.GetAt(max2))>0)    //如果目录一中的最新文件比目录二中最新的文件
		{
			MyCopyFile(m_OneArray.GetAt(max1-2)+"\\"+m_OneArray.GetAt(max1-1),
				m_TwoArray.GetAt(max2-2)+"\\"+m_OneArray.GetAt(max1-1));
		}
		else
		{
			MyCopyFile(m_TwoArray.GetAt(max1-2)+"\\"+m_TwoArray.GetAt(max1-1),
				m_OneArray.GetAt(max2-2)+"\\"+m_TwoArray.GetAt(max1-1));
		}
		break;
	case 2://拷贝访问时间最新的
		max1=3;
		strMax=m_OneArray.GetAt(3);
		for(i=3;i<m_OneArray.GetCount();i+=5)
		{
			if(m_OneArray.GetAt(i).Compare(strMax)>0)
			{   
               strMax=m_OneArray.GetAt(i);
				max1=i;
			}
		}
		max2=3;	
		strMax=m_TwoArray.GetAt(3);
		for(i=3;i<m_TwoArray.GetCount();i+=5)
		{
			if(m_TwoArray.GetAt(i).Compare(strMax)>0)
			{
				strMax=m_TwoArray.GetAt(i);
				max2=i;
			}
		}
		if(m_OneArray.GetAt(max1).Compare(m_TwoArray.GetAt(max2))>0)
		{
			MyCopyFile(m_OneArray.GetAt(max1-3)+"\\"+m_OneArray.GetAt(max1-2),
				m_TwoArray.GetAt(max2-3)+"\\"+m_OneArray.GetAt(max1-2));
		}
		else
		{
			MyCopyFile(m_TwoArray.GetAt(max1-3)+"\\"+m_TwoArray.GetAt(max1-2),
				m_OneArray.GetAt(max2-3)+"\\"+m_TwoArray.GetAt(max1-2));
		}

		break;
	case 3://拷贝修改时间最新的
		max1=4;
		strMax=m_OneArray.GetAt(4);
		for(i=4;i<m_OneArray.GetCount()-5;i+=5)
		{
			if(m_OneArray.GetAt(i).Compare(strMax)>0)
			{
				strMax=m_OneArray.GetAt(i);
				max1=i;
			}
		}
		max2=4;	
		strMax=m_TwoArray.GetAt(4);
		for(i=4;i<m_TwoArray.GetCount()-5;i+=5)
		{
			if(m_TwoArray.GetAt(i).Compare(strMax)>0)
			{
				strMax=m_TwoArray.GetAt(i);
				max2=i;
			}
		}
		if(m_OneArray.GetAt(max1).Compare(m_TwoArray.GetAt(max2))>0)
		{
			MyCopyFile(m_OneArray.GetAt(max1-4)+"\\"+m_OneArray.GetAt(max1-3),
				m_TwoArray.GetAt(max2-4)+"\\"+m_OneArray.GetAt(max1-3));
		}
		else
		{
			MyCopyFile(m_TwoArray.GetAt(max1-4)+"\\"+m_TwoArray.GetAt(max1-3),
				m_OneArray.GetAt(max2-4)+"\\"+m_TwoArray.GetAt(max1-3));
		}

		break;
	}
}

//我的文件拷贝函数
//参数1源文件
//参数2目的文件
void CMyFileFind::MyCopyFile(CString FileOldPath, CString FileNewPath)
{
	CFile fileOld;
	CFile fileNew;
	CString str="";
	CString midStr="";
	char Buffer[1000000]={0};

    if(FileNewPath.GetLength()>MAX_PATH)
	{
		AfxMessageBox("对不起文件长度已经过长不能再拷贝");
	}
	fileOld.Open(FileOldPath,CFile::modeRead);
	if(!fileNew.Open(FileNewPath,CFile::modeCreate|CFile::modeWrite))
	{
		AfxMessageBox(FileNewPath+"对不起你要拷贝的文件在新文件夹有重名");
	}
	try
	{
        UINT length;
		length =(UINT)fileOld.GetLength();
		fileOld.Read( Buffer, length);

		fileNew.Write(Buffer,length);
		fileNew.Close();
		fileOld.Close();
	}
	catch (CFileException* e )
	{
		TRACE0(" CFileException caught"); 
		throw e;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -