/**************************************************
è¿æ¯CBrowseDirçç±»å®ä¹æ件 BrowseDir.h
/**************************************************
#include "stdlib.h"
class CBrowseDir
{
protected:
//åæ¾åå§ç®å½çç»å¯¹è·¯å¾ï¼ä»¥'\'ç»å°¾
char m_szInitDir[_MAX_PATH];
public:
//缺çæé å¨
CBrowseDir();
//设置åå§ç®å½ä¸ºdirï¼å¦æè¿åfalseï¼è¡¨ç¤ºç®å½ä¸å¯ç¨
bool SetInitDir(const char *dir);
//å¼å§éååå§ç®å½åå
¶åç®å½ä¸ç±filespecæå®ç±»åçæ件
//filespecå¯ä»¥ä½¿ç¨éé
符 * ?ï¼ä¸è½å
å«è·¯å¾ã
//å¦æè¿åfalseï¼è¡¨ç¤ºéåè¿ç¨è¢«ç¨æ·ä¸æ¢
bool BeginBrowse(const char *filespec);
protected:
//éåç®å½dirä¸ç±filespecæå®çæ件
//对äºåç®å½,éç¨è¿ä»£çæ¹æ³
//å¦æè¿åfalse,表示ä¸æ¢éåæ件
bool BrowseDir(const char *dir,const char *filespec);
//å½æ°BrowseDiræ¯æ¾å°ä¸ä¸ªæ件,å°±è°ç¨ProcessFile
//并ææ件åä½ä¸ºåæ°ä¼ éè¿å»
//å¦æè¿åfalse,表示ä¸æ¢éåæ件
//ç¨æ·å¯ä»¥è¦å该å½æ°,å å
¥èªå·±çå¤ç代ç
virtual bool ProcessFile(const char *filename);
//å½æ°BrowseDiræ¯è¿å
¥ä¸ä¸ªç®å½,å°±è°ç¨ProcessDir
//并ææ£å¨å¤ççç®å½ååä¸ä¸çº§ç®å½åä½ä¸ºåæ°ä¼ éè¿å»
//å¦ææ£å¨å¤ççæ¯åå§ç®å½,åparentdir=NULL
//ç¨æ·å¯ä»¥è¦å该å½æ°,å å
¥èªå·±çå¤ç代ç
//æ¯å¦ç¨æ·å¯ä»¥å¨è¿éç»è®¡åç®å½ç个æ°
virtual void ProcessDir(const char
*currentdir,const char *parentdir);
};
/*********************************************/
è¿æ¯CBrowseDirçç±»å®ç°æ件 BrowseDir.cpp
/***********************************************/
#include "stdlib.h"
#include "direct.h"
#include "string.h"
#include "io.h"
#include "browsedir.h"
CBrowseDir::CBrowseDir()
{
//ç¨å½åç®å½åå§åm_szInitDir
getcwd(m_szInitDir,_MAX_PATH);
//å¦æç®å½çæåä¸ä¸ªåæ¯ä¸æ¯'\',åå¨æåå ä¸ä¸ä¸ª'\'
int len=strlen(m_szInitDir);
if (m_szInitDir[len-1] != '\\')
strcat(m_szInitDir,"\\");
}
bool CBrowseDir::SetInitDir(const char *dir)
{
//å
ædir转æ¢ä¸ºç»å¯¹è·¯å¾
if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)
return false;
//å¤æç®å½æ¯å¦åå¨
if (_chdir(m_szInitDir) != 0)
return false;
//å¦æç®å½çæåä¸ä¸ªåæ¯ä¸æ¯'\',åå¨æåå ä¸ä¸ä¸ª'\'
int len=strlen(m_szInitDir);
if (m_szInitDir[len-1] != '\\')
strcat(m_szInitDir,"\\");
return true;
}
bool CBrowseDir::BeginBrowse(const char *filespec)
{
ProcessDir(m_szInitDir,NULL);
return BrowseDir(m_szInitDir,filespec);
}
bool CBrowseDir::BrowseDir
(const char *dir,const char *filespec)
{
_chdir(dir);
//é¦å
æ¥æ¾dirä¸ç¬¦åè¦æ±çæ件
long hFile;
_finddata_t fileinfo;
if ((hFile=_findfirst(filespec,&fileinfo)) != -1)
{
do
{
//æ£æ¥æ¯ä¸æ¯ç®å½
//å¦æä¸æ¯,åè¿è¡å¤ç
if (!(fileinfo.attrib & _A_SUBDIR))
{
char filename[_MAX_PATH];
strcpy(filename,dir);
strcat(filename,fileinfo.name);
if (!ProcessFile(filename))
return false;
}
} while (_findnext(hFile,&fileinfo) == 0);
_findclose(hFile);
}
//æ¥æ¾dirä¸çåç®å½
//å 为å¨å¤çdirä¸çæ件æ¶ï¼æ´¾çç±»çProcessFileæå¯è½æ¹åäº
//å½åç®å½ï¼å æ¤è¿è¦éæ°è®¾ç½®å½åç®å½ä¸ºdirã
//æ§è¡è¿_findfirståï¼å¯è½ç³»ç»è®°å½ä¸äºç¸å
³ä¿¡æ¯ï¼å æ¤æ¹åç®å½
//对_findnext没æå½±åã
_chdir(dir);
if ((hFile=_findfirst("*.*",&fileinfo)) != -1)
{
do
{
//æ£æ¥æ¯ä¸æ¯ç®å½
//å¦ææ¯,åæ£æ¥æ¯ä¸æ¯ . æ ..
//å¦æä¸æ¯,è¿è¡è¿ä»£
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name,".") != 0 && strcmp
(fileinfo.name,"..") != 0)
{
char subdir[_MAX_PATH];
strcpy(subdir,dir);
strcat(subdir,fileinfo.name);
strcat(subdir,"\\");
ProcessDir(subdir,dir);
if (!BrowseDir(subdir,filespec))
return false;
}
}
} while (_findnext(hFile,&fileinfo) == 0);
_findclose(hFile);
}
return true;
}
bool CBrowseDir::ProcessFile(const char *filename)
{
return true;
}
void CBrowseDir::ProcessDir(const char
*currentdir,const char *parentdir)
{
}
/*************************************************
è¿æ¯ä¾åexample.cpp
/*************************************************
#include "stdio.h"
#include "BrowseDir.h"
//ä»CBrowseDiræ´¾çåºçåç±»ï¼ç¨æ¥ç»è®¡ç®å½ä¸çæ件ååç®å½ä¸ªæ°
class CStatDir:public CBrowseDir
{
protected:
int m_nFileCount; //ä¿åæ件个æ°
int m_nSubdirCount; //ä¿ååç®å½ä¸ªæ°
public:
//缺çæé å¨
CStatDir()
{
//åå§åæ°æ®æåm_nFileCountåm_nSubdirCount
m_nFileCount=m_nSubdirCount=0;
}
//è¿åæ件个æ°
int GetFileCount()
{
return m_nFileCount;
}
//è¿ååç®å½ä¸ªæ°
int GetSubdirCount()
{
//å 为è¿å
¥åå§ç®å½æ¶ï¼ä¹ä¼è°ç¨å½æ°ProcessDirï¼
//æ以å1åææ¯çæ£çåç®å½ä¸ªæ°ã
return m_nSubdirCount-1;
}
protected:
//è¦åèå½æ°ProcessFileï¼æ¯è°ç¨ä¸æ¬¡ï¼æ件个æ°å 1
virtual bool ProcessFile(const char *filename)
{
m_nFileCount++;
return CBrowseDir::ProcessFile(filename);
}
//è¦åèå½æ°ProcessDirï¼æ¯è°ç¨ä¸æ¬¡ï¼åç®å½ä¸ªæ°å 1
virtual void ProcessDir
(const char *currentdir,const char *parentdir)
{
m_nSubdirCount++;
CBrowseDir::ProcessDir(currentdir,parentdir);
}
};
void main()
{
//è·åç®å½å
char buf[256];
printf("请è¾å
¥è¦ç»è®¡çç®å½å:");
gets(buf);
//æé 类对象
CStatDir statdir;
//设置è¦éåçç®å½
if (!statdir.SetInitDir(buf))
{
puts("ç®å½ä¸åå¨ã");
return;
}
//å¼å§éå
statdir.BeginBrowse("*.*");
//ç»è®¡ç»æä¸ï¼åç®å½ä¸ªæ°ä¸å« . å ..
printf("æ件æ»æ°: %d\nåç®å½æ»æ°:
%d\n",statdir.GetFileCount(),
statdir.GetSubdirCount());
}
温馨提示:内容为网友见解,仅供参考