读书人

如何计算一个目录下的可执行文件数目

发布时间: 2012-03-15 11:50:38 作者: rapoo

怎么计算一个目录下的可执行文件数目
如题...

[解决办法]
FindFirstFile
FindNextFile
枚举目录下的所有文件
然后找出可执行的。
[解决办法]
FindFirstFile
PathFindExtension
FindNextFile
FindClose
[解决办法]
int i=1;
FindFirstFile ;

while(findnextfile())
{

if(pos('.exe',filename)>0){i++;}
}
[解决办法]
下面的这段代码是在SZROOT目录 中删除目录名为szdir和后缀为SZEXT的文件
BOOL CDelDirDlg::DelFile(CString szroot, CString szdir, CString szext)
{
HANDLE hFile;
bool bFinished=FALSE;
WIN32_FIND_DATA filedata;
CString strroot(szroot);
strroot.Format(szroot+"\\%s","*.*");
hFile=FindFirstFile(strroot.GetBuffer(0),&filedata);
while(!bFinished)
{
if(filedata.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)
{
if((!stricmp(filedata.cFileName,szdir.GetBuffer(0)))&&(lstrcmp(filedata.cFileName,"."))&&(lstrcmp(filedata.cFileName,"..")))
{
strroot.Format(szroot+"\\%s",filedata.cFileName);
DelDirectory(strroot);
}
else if (lstrcmp(filedata.cFileName,".")&&lstrcmp(filedata.cFileName,".."))
{
strroot.Format(szroot+"\\%s",filedata.cFileName);
DelFile(strroot,szdir,szext);
}

}
else if(!szext.IsEmpty())
{
if((unsigned int)szext.GetLength()<strlen(filedata.cFileName))
{
TCHAR fileexd[4];
lstrcpy(fileexd,filedata.cFileName+(strlen(filedata.cFileName)-szext.GetLength()));
if((!stricmp(fileexd,szext.GetBuffer(0))))
{
CString strDelFile;
strDelFile=szroot;
strDelFile.Format(szroot+"\\%s",filedata.cFileName);
if(!DeleteFile(strDelFile.GetBuffer(0)))
{
CString str;
str.Format("%s","不能删除");
str=strDelFile+str;
AfxMessageBox(str,MB_OK);
}
}
}
}
if(!FindNextFile(hFile,&filedata))
{
if(GetLastError()==ERROR_NO_MORE_FILES)
{
bFinished=TRUE;
}
}
}
FindClose(hFile);
return TRUE;
}
CString szroot 查找的目录
CString szdir 要删除的目录
CString szext 要删除的文件后缀

[解决办法]
#include <iostream>
#include <windows.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

using namespace std;

int main( void )
{
WIN32_FIND_DATA find_data;
const char *path = "*.*";
HANDLE hFindFile = FindFirstFile( path, &find_data );
size_t count = 0;

do {
if( lstrcmpi( find_data.cFileName, TEXT(".") ) == 0 ||
lstrcmpi( find_data.cFileName, TEXT("..") ) == 0 )
continue;
LPTSTR szExtension = PathFindExtension( find_data.cFileName );
if( szExtension == NULL )
continue;
if( lstrcmpi( szExtension, TEXT(".exe") ) == 0 )
++count;
}while( FindNextFile( hFindFile, &find_data) );
cout << count << endl;
return 0;
}

读书人网 >C++

热点推荐