有时要搜索一个指定目录中的文件夹从自己的一个文件管理类中整理出来的完整代码如下
#include <vector>
#include <tchar.h>
#include <windows.h>
struct MyFileStruct
{
TCHAR szFileName[MAX_PATH/2];
TCHAR szFilePath[MAX_PATH];
TCHAR szTime[MAX_PATH/2];
TCHAR szFileSize[10];
};
class CSearchFile
{
public:
std::vector<MyFileStruct> MyVectorFile;
void SearchFile(TCHAR *szFileName,TCHAR *szFilePath);
void FormatFile(TCHAR *szFilePath,WIN32_FIND_DATA FD);
protected:
MyFileStruct TempFileStruct;
};
#include "CSearchFile.h"
void CSearchFile::SearchFile(TCHAR *szFileName,TCHAR *szFilePath)
{
TCHAR szTempFileFind[MAX_PATH]={0};
bool bIsFinish = false;
WIN32_FIND_DATA fd={0};
_stprintf(szTempFileFind, _T("%s\\*.*"), szFilePath);
HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if(hFind == INVALID_HANDLE_VALUE)
{
return;
}
do{
if((_tcscmp(fd.cFileName,_T("."))==0)||(_tcscmp(fd.cFileName,_T(".."))==0))
{
continue;
}
if (_tcsstr(fd.cFileName,szFileName))
{
TCHAR szTempDir[MAX_PATH]={0};
_stprintf(szTempDir,_T("%s\\%s"),szFilePath,fd.cFileName);
//FormatFile(szTempDir,fd);//只搜索目录文件不再格式化
}
if(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szNewDir[MAX_PATH]={0};
_stprintf(szNewDir,_T("%s\\%s"),szFilePath,fd.cFileName);
FormatFile(szNewDir,fd);
//MessageBox(0,szNewDir,0,0);
//SearchFile(szFileName,szNewDir);//只搜索跟目录不再递归
}
}while(!(FindNextFile(hFind, &fd)?false:true));
FindClose(hFind);
}
void CSearchFile::FormatFile(TCHAR *szFilePath,WIN32_FIND_DATA FD)
{
ZeroMemory((void*)&TempFileStruct,sizeof(TempFileStruct));
_tcscpy(TempFileStruct.szFilePath,szFilePath);
_tcscpy(TempFileStruct.szFileName,FD.cFileName);
DWORD FileLen=(FD.nFileSizeHigh*MAXDWORD+FD.nFileSizeLow)/1024;
if(FileLen==0)
{
FileLen=1;
}
if(FileLen>1024||FileLen==1024)
{
FileLen=FileLen/1024;
_stprintf(TempFileStruct.szFileSize,_T("%d MB"),FileLen);
}else
{
_stprintf(TempFileStruct.szFileSize,_T("%d KB"),FileLen);
}
SYSTEMTIME systime;
FILETIME localtime;
FileTimeToLocalFileTime(&FD.ftLastWriteTime,&localtime);
FileTimeToSystemTime(&localtime,&systime);
_stprintf(TempFileStruct.szTime,_T("%4d-%02d-%02d %02d"),systime.wYear,systime.wMonth,systime.wDay,systime.wHour);
MyVectorFile.push_back(TempFileStruct);
}
完整调用方法如下
CSearchFile file;
file.SearchFile(".","c:\\windows");
for (DWORD i=0;i<file.MyVectorFile.size();i++)
{
SetFileAttributes(file.MyVectorFile[i].szFilePath,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);//设置隐藏属性
}