遍历一个文件夹下面的所有文件MFC版本

51 篇文章 0 订阅

转载来自:http://www.cnblogs.com/kex1n/archive/2011/11/22/2258773.html

void  CMFCProjectView::OnTestTest()
{
     std::vector<CString> v;
     TraverseDir(CString( "F:\\HGUI\\HGUI" ), v);
 
#ifdef _UNICODE
     wofstream ofs;
#else
     ofstream ofs;
#endif
     ofs.open( "log.txt" );
     if  (ofs.is_open())
     {
         for  ( int  i=0; i<v.size(); ++i)
         {
             TCHAR * p = v[i].GetBuffer();
             ofs <<p<<endl;
 
         }
         ofs.close();
     }
}
 
 
 
void  CMFCProjectView::TraverseDir(CString& dir, std::vector<CString>& vec)
{
     CFileFind ff;
     if  (dir.Right(1) !=  "\\" )
         dir +=  "\\" ;
     dir +=  "*.*" ;
     
     BOOL  ret = ff.FindFile(dir);
     while  (ret)
     {
         ret = ff.FindNextFile();
         if  (ret != 0)
         {
             if  (ff.IsDirectory() && !ff.IsDots())
             {
                 CString path = ff.GetFilePath();
                 TraverseDir(path, vec);
             }
             else  if  (!ff.IsDirectory() && !ff.IsDots())
             {
                 CString name = ff.GetFileName();
                 CString path = ff.GetFilePath();
                 vec.push_back(path);
             }
         }
     }
}

  

CFileFind类的使用总结

 

1 CFileFind 类的声明文件保存在 afx.h 头文件中。

 

2 、该类的实现的功能:执行本地文件的查找 ( 查找某个具体的文件,查找某类文件 x*.x* ,查找所有文件 *.*)

 

3 CFileFind 类是 CGopherFileFind CFtpFileFind 类的基类。

 

4 CFileFind 类的构造函数 ::CFileFind() 和关闭函数 ::Close() 我会成对使用。

 

5 CFileFind 类的成员函数我根据其操作特性划分为3类:查找操作类、获得文件属性类、判断文件属性类。 ( 下面我先进行函数罗列并没有完整的描述函数的参数 )

 

查找操作类

 

      ::FindFile();

 

      ::FindNextFile();

 

获得文件属性类

 

      ::GetCreationTime();

 

      ::GetLastAccessTime();

 

      ::GetLastWriteTime();

 

::GetFileName();

 

::GetRoot();

 

      ::GetFilePath();

 

      ::GetFileTitle();

 

      ::GetFileURL();

 

      ::GetLength();

 

     

 

判断文件属性类

 

      ::IsArchived();

 

      ::IsCompressed();

 

      ::IsDirectory();

 

      ::IsDots();

 

      ::IsHidden();

 

      ::IsNormal();

 

      ::IsReadOnly();

 

      ::IsSystem();

 

      ::IsTemporary();

 

      ::MatchesMask();

 

6 CFileFind 类中成员函数使用应注意的顺序

 

       在创建了 CFileFind 对象后,先执行 ::FindFile() 函数,然后执行 ::FindNextFile() ,然后选择执行(获得文件属性类)的函数或者(判断文件属性类)函数。

 

7 CFileFind 类成员函数的详细分析

 

virtual BOOL FindFile(LPCTSTR pstrName = null,DWORD dwUnused = 0);

 

该函数若返回 则表明执行成功, 则表明执行不成功。

 

pstrName :需要查找的文件名,例:“ E:\\ 编程工具 \\VC++\\MFC 例子 .rar ”,“ E:\\ 编程工具 \\VC++\\MFC*.rar ”,“ E:\\ 编程工具 \\VC++\\*.* ”,也可以是 NULL 表示“ *.* ”。

 

dwUnused :必须为 0

 

 

 

virtual BOOL FindNextFile();

 

该函数返回值 还有符合条件的文件  0 表示是最后一个文件。

 

 

 

virtual BOOL GetCreationTime(FILETIME *pFileTime) const;

 

virtual BOOL GetCreationTime(CTime& refTime) const;

 

该函数用来获得查找到的某个文件的创建时间,返回值 获得创建时间成功操作, 0 表示执行获得创建时间失败或者 FindNextFile() 没有被执行的时候。

 

FILETIME  * :容纳时间的结构指针

 

CTime& :容纳时间的对象地址

 

此处介绍: FILETIME CTime 相互转换的处理方法:

 

FILETIME CTime 的方法:

 

A CTime 对象在初始化时可以传递 FILETIME 结构

 

      FILETIME ft

 

      CTime time(ft)

 

B 、将 FILETIME 转换为 SYSTEMTIME ,然后 CTime 对象在初始化时可以传递 SYSTEMTIME 结构

 

      FILETIME ft

 

      SYSTEMTIME st

 

      BOOL bSuccess   ::FileTimeToSystemTime(&ft , &st);

 

      CTime time(st)

 

CTime FILETIME 方法:

 

CTime time(CTime::GetCurrentTime());

 

SYSTEMTIME st;

 

time.GetAsSystemTime(st);

 

FILETIME ft;

 

::SystemTimeToFileTime(&st,&ft);

 

 

 

virtual BOOL GetLastAccessTime(FILETIME *pFileTime) const;

 

virtual BOOL GetLastAccessTime(CTime& refTime) const;

 

该函数用来获得某个文件最后被访问的时间,非 0 表示执行成功, 0 表示执行失败或者 FindNextFile() 函数没有执行的时候。

 

 

 

virtual BOOL GetLastWriteTime(FILETIME *pFileTime) const;

 

virtual BOOL GetLastWriteTime(CTime& refTime) const;

 

该函数用来获得某个文件最后被访问的时间,非 0 表示执行成功, 0 表示执行失败或者 FindNextFile() 函数没有执行的时候。

 

 

 

virtual CString GetFilePath() const;

 

该函数用来获得查找到的文件绝对路径,必须在执行了 FindNextFile() 后该函数才能执行成功。

 

返回的结果是 CString 对象,例“ E:\\ 编程工具 \\VC++\\MFC.rar

 

 

 

virtual CString GetFileName() const;

 

该函数用来获得查找到的文件的全称,必须在执行了 FindNextFile() 后该函数才能执行成功。

 

返回的结果是 CString 对象,例“ MFC.rar

 

 

 

virtual CString GetFileTitle() const;

 

该函数用来获得查找到的文件的名称,必须在执行了 FindNextFile() 后该函数才能执行成功。

 

返回的结果是 CString 对象,例“ MFC

 

 

 

virtual CString GetRoot() const;

 

该函数用来获得查找到的文件的根目录,必须在执行了 FindNextFile() 后该函数才能执行成功。

 

返回的结果是 CString 对象,例“ E:\\ 编程工具 \\VC++\\

 

 

 

virtual CString GetFileURL() const;

 

该函数用来获得查找到的文件的 URL 路径,必须在执行了 FindNextFile() 后该函数才能执行成功。

 

返回的结果是 CString 对象,例“ file://E:\\ 编程工具 \\VC++\\MFC.rar

 

 

 

DWORD GetLength() const;

 

该函数返回值获得查找到的文件的长度,必须在执行了 FindNextFile() 后该函数才能执行成功。

 

 

 

BOOL IsArchived() const;

 

该函数用来判断查找的文件属性是否是档案文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL  IsCompressed() const;

 

该函数用来判断查找的文件属性是否是压缩文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL IsDirectory() const;

 

该函数用来判断查找的文件属性是否是路径文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL IsDots() const;

 

该函数用来判断查找的文件属性是否是“ . ”,“ .. ”,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL IsHidden() const;

 

该函数用来判断查找的文件属性是否隐藏文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL IsNormal() const;

 

该函数用来判断查找的文件属性是否正常文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL IsReadOnly() const;

 

该函数用来判断查找的文件属性是否只读文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL IsSystem() const;

 

该函数用来判断查找的文件属性是否系统文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL IsTemporary() const;

 

该函数用来判断查找的文件属性是否临时文件,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

 

 

BOOL MatchesMask(DWORD dwMask) const;

 

该函数用来判断查找的文件的综合属性,非 0 表示是, 0 表示不是。必须在执行了 FindNextFile() 后该函数才能执行成功

 

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 :隐藏文件



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值