设为首页 加入收藏

TOP

MFC遍历文件夹(遍历目录),遍历文件(一)
2014-11-23 21:45:54 来源: 作者: 【 】 浏览:16
Tags:MFC 文件夹 目录 文件

/*Title:MFC遍历文件夹(遍历目录),遍历文件

*Author:Insun

*Blog:http://yxmhero1989.blog.163.com

*From:http://www.4safer.com/forum.php mod=viewthread&tid=634&page=1&extra=#pid1915

*/

Main Directory用Combox,ID:IDC_MAIN_DIR,右键之,添加变量:类别Control;变量名:m_cbMainDir
Sub Directory用ListBox,ID:IDC_SUB_DIRS,右键之,添加变量:类别Control;变量名:m_lbSubDirs
All files用ListBox,ID:IDC_LIST_ALL_FILES,右键之,添加变量:类别Contr;变量名:m_strAllFiles

在OnInitDialog() 初始化函数里面最后添加如下代码:

//--------------------------------------------------
//char *driver[] = { "A:", "C:", "D:", "E:", ...... };
char szBuffer[MAX_PATH];
m_cbMainDir.AddString("C:"); //自己添加驱动器算了,哎- -
GetWindowsDirectory(szBuffer,MAX_PATH);//Windows目录
m_cbMainDir.AddString(szBuffer);
szBuffer[2]=0;//驱动器 C: 第3个去掉
m_cbMainDir.AddString(szBuffer);
GetSystemDirectory(szBuffer,MAX_PATH);//系统目录
m_cbMainDir.AddString(szBuffer);
GetCurrentDirectory(MAX_PATH,szBuffer);//当前目录
m_cbMainDir.AddString(szBuffer);
//--------------------------------------------------

都有注释,看起来简单,3个函数而已。

在OnCbnSelchangeMainDir()函数如下:

void CLesson22Dlg::OnCbnSelchangeMainDir()
{
CString strMainDir,strPath;
int nSelection;
HANDLE hFind;
WIN32_FIND_DATA dataFind;
BOOL bMoreFiles;

nSelection = m_cbMainDir.GetCurSel(); //check the index is valid
if(nSelection !=CB_ERR)
{
m_cbMainDir.GetLBText(nSelection,strMainDir);
m_lbSubDirs.ResetContent();//clean
strPath = strMainDir + "\*.*";
hFind = FindFirstFile(strPath,&dataFind);
bMoreFiles = true;
while(hFind != INVALID_HANDLE_VALUE && bMoreFiles == TRUE)
{
//if(dataFind.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)//Directories
if((dataFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
if(strcmp(dataFind.cFileName ,"."))
if(strcmp(dataFind.cFileName,".."))// ignored the "." and ".." 2 special directory entries
{
m_lbSubDirs.AddString(dataFind.cFileName);
}
}
if (dataFind.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE) //ARCHIVE存档;HIDDEN;READONLY
{
m_strAllFiles.AddString(dataFind.cFileName);
}
if ((dataFind.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
//||(dataFind.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
||(dataFind.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
{ //非要显示隐藏文件和系统文件和只读文件
m_strAllFiles.AddString(dataFind.cFileName);
}
bMoreFiles = FindNextFile(hFind,&dataFind);

}
FindClose(hFind);// close the handle

}

其实仔细研究起来就难了。
一般一个目录或文件有三个属性:只读、隐藏、存档。
dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY
||dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY+
FILE_ATTRIBUTE_READONLY
||dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY+
FILE_ATTRIBUTE_ARCHIVE
||dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY+
FILE_ATTRIBUTE_HIDDEN

winnt.h里面定义了很多:
#define FILE_SHARE_READ 0x00000001
#define FILE_SHARE_WRITE 0x00000002
#define FILE_SHARE_DELETE 0x00000004
#define FILE_ATTRIBUTE_READONLY 0x00000001
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
#define FILE_ATTRIBUTE

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇dietlibc中的strcpy算法浅析 下一篇关于内存比较和字节对齐

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: