CFileFind类的详解以及应用实例

本文详细介绍了CFileFind类的功能,包括查找、获取文件属性、判断文件属性等操作,并提供了遍历指定目录、查找指定文件及删除整个目录的方法。CFileFind类支持通配符搜索,适用于本地文件系统的操作。
    CFileFind类在afx.h头文件中声明。
    功能:执行本地文件的查找,支持通配符。
    类的成员函数:

    1、查找操作类:

    virtual BOOL FindFile(LPCTSTR pstrName = NULL,DWORD dwUnused = 0); //搜索目录下指定的文件,成功返回非0。第二个参数不必理会
    virtual BOOL FindNextFile( );//继续先前的搜索,在调用此函数之前需先调用FindFile函数,成功返回非0.
    2、获取文件属性类:

    virtual BOOL GetCreationTime(FILETIME* pTimeStamp) const;
    virtual BOOL GetCreationTime(CTime& refTime) const;  //获取文件创建时间,成功返回非0。
    virtual CString GetFileName( ) const; //获取文件名称,包括扩展名。例“西游记.txt”
    virtual CString GetFilePath( ) const;//获取文件的绝对路径。例“D:\\我的文档\\小说\\古典\\西游记.txt”
    virtual CString GetFileTitle( ) const; //获取文件的名称,不包括扩展名。例“西游记”
    virtual BOOL GetLastWriteTime(FILETIME* pTimeStamp) const;
    virtual BOOL GetLastWriteTime(CTime& refTime) const;  //获取文件最后一次修改时间。成功返回非0.
    virtual BOOL GetLastAccessTime(CTime& refTime) const;
    virtual BOOL GetLastAccessTime(FILETIME* pTimeStamp) const; //获取文件最后一次被访问的时间,成功返回非0.
    ULONGLONG GetLength( ) const; //获取文件的长度,以字节为单位
    virtual CString GetRoot( ) const;  //获取文件的根目录,例“D:\\我的文档\\小说\\古典\\”

    3、判断文件属性类:

    BOOL IsArchived( ) const; //判断文件是否是档案文件
    BOOL IsCompressed( ) const; //判断文件是否是压缩文件
    BOOL IsDirectory( ) const;  //判断文件是否是目录
    virtual BOOL IsDots( ) const; //判断文件是否是“.”和“..” 
    BOOL IsHidden( ) const; // 判断文件是否是隐藏文件
    BOOL IsNormal( ) const; //判断文件是否是常规文件
    BOOL IsReadOnly( ) const; //判断文件是否是只读文件
    BOOL IsSystem( ) const;  //判断文件是否是系统文件
    BOOL IsTemporary( ) const; //判断文件是否是临时文件
    virtual BOOL MatchesMask(DWORD dwMask) const;  //判断文件的综合属性。

    dwMask参数的使用方法,几种文件属性采用或运算:

    FILE_ATTRIBUTE_ARCHIVE:        档案文件  
    FILE_ATTRIBUTE_COMPRESSED:     压缩文件   
    FILE_ATTRIBUTE_DIRECTORY:      路径文件
    FILE_ATTRIBUTE_NORMAL:         正常文件   
    FILE_ATTRIBUTE_READONLY:       只读文件
    FILE_ATTRIBUTE_SYSTEM:         系统文件  
    FILE_ATTRIBUTE_TEMPORARY:      临时文件
    FILE_ATTRIBUTE_HIDDEN:         隐藏文件


遍历指定目录

	void BrowseDir(CString strDir)
	{
		CFileFind ff;
		CString szDir = strDir;
		if(szDir.Right(1) != "\\")
			szDir += "\\";
		szDir += "*.*";
		BOOL res = ff.FindFile(szDir);
		while(res)
		{
			res = ff.FindNextFile();
			if(ff.IsDirectory() && !ff.IsDots())
			{
				//如果是一个子目录,用递归继续往深一层找
				BrowseDir(ff.GetFilePath());
			}else if(!ff.IsDirectory() && !ff.IsDots())
			{
			    //显示当前访问的文件
				CStatic* p = (CStatic*)GetDlgItem(IDC_STATIC_FILE);
				CString str;
				str.Format("当前访问的文件:%s",ff.GetFilePath());
				p->SetWindowText(str);
				Sleep(500);
			}
		}
		ff.Close();//关闭
	}
查找指定的文件:

	void SearchFile(CString strDir,CString strFile)
	{
		CFileFind ff;
		CString szDir = strDir;
		if(szDir.Right(1) != "\\")
		szDir += "\\";
		szDir += "*.*";
		BOOL res = ff.FindFile(szDir);
		while(res)
		{
			res = ff.FindNextFile();
			if(ff.GetFileName()==strFile)
			{
				//找到了,加入列表框中
				m_ctrlFilesList.AddString(ff.GetFilePath());
			}
			if(ff.IsDirectory() && !ff.IsDots())
			{
				//如果是一个子目录,用递归继续往深一层找
				SearchFile(ff.GetFilePath(),strFile);
			}
		}
		ff.Close();//关闭
	}

删除整个目录:

	void RecursiveDelete(CString szPath)
	{
		CFileFind ff;
		CString path = szPath;
		if(path.Right(1) != "\\")
		path += "\\";
		path += "*.*";
		BOOL res = ff.FindFile(path);
		while(res)
		{
			res = ff.FindNextFile();//是文件时直接删除
			if (!ff.IsDots() && !ff.IsDirectory())
				DeleteFile(ff.GetFilePath());
			else if (ff.IsDots())
				continue;
			else if (ff.IsDirectory())
			{
				path = ff.GetFilePath();
				//是目录时继续递归,删除该目录下的文件
				RecursiveDelete(path);
				//目录为空后删除目录
				RemoveDirectory(path);  //删除空目录,若目录不为空则返回0
			}
		}
		//最终目录被清空了,于是删除该目录
		RemoveDirectory(szPath);
	 
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值