发个贴说下CFindFile的问题

时间:2022-01-15 10:56:17
由于需要,接触到WTL/ATL,然后google以下CFindFile,进来了伟大的CSDN,看到一帖子,一个TX问了关于CFindFile的问题,后面一群人跟帖:是CFileFind吧。
其实,大家都没错,或者说大家都错了。LZ没有跟大家说他用的不是MFC,是WTL/ATL。然后下面的一群人就想当然的以为是MFC,所以都说是CFileFind了。
然后大家其实都想都没想,就说LZ错了,应该是CFileFind。既然LZ写出来是CFindFile了,写错的概率应该来说还是比较小的,大家应该对于自己不熟悉的去google一下。
哈哈,说了一大堆废话。不过这论坛的确人气很高,人也很好,大家都很热心肠哦~本人新手,以后还望大家多多指教~~

最后附上一点CFindFile的资料,介绍的很简单,不过基本和MFC的差不多。

CFindFile 封装了FindFirstFile()和FindNextFile() APIs,它比MFC的CFileFind还要容易使用一些,使
用方式可以参考下面的模式:

CFindFile finder;
CString sPattern = _T("C:\\windows\\*.exe");

if ( finder.FindFirstFile ( sPattern ) )
{
do
{
// act on the file that was found
}
while ( finder.FindNextFile() );
}


finder.Close();
如果FindFirstFile() 返回true,就表示至少有一个文件匹配查找模式,在循环内,你可以访问
CFindFile 的公有成员m_fd,这是一个WIN32_FIND_DATA 数据结构,包含了这个文件的信息,循环可以一
直继续直到FindNextFile() 返回false,这表示你已经把所有的文件遍历了一遍。

为了使用方便,CFindFile 还提供了一些操作m_fd的函数,这些函数的返回值只在成功调用了
FindFirstFile或FindNextFile()之后才有意义。

ULONGLONG GetFileSize()
返回文件的大小,数据类型时64位无符号整形数。

BOOL GetFileName(LPTSTR lpstrFileName, int cchLength)
CString GetFileName()
得到查找到文件的名字和扩展名(从m_fd.cFileName复制数据)。

BOOL GetFilePath(LPTSTR lpstrFilePath, int cchLength)
CString GetFilePath()
返回查找到文件的全路径。

BOOL GetFileTitle(LPTSTR lpstrFileTitle, int cchLength)
CString GetFileTitle()
返回文件的标题 (就是没有扩展名)。

BOOL GetFileURL(LPTSTR lpstrFileURL, int cchLength)
CString GetFileURL()
创建一个file:// URL,包含文件的全路径。(译者注:比如“file://d:\doc\sss.doc”)

BOOL GetRoot(LPTSTR lpstrRoot, int cchLength)
CString GetRoot()
得到文件所在的目录。

BOOL GetLastWriteTime(FILETIME* pTimeStamp)
BOOL GetLastAccessTime(FILETIME* pTimeStamp)
BOOL GetCreationTime(FILETIME* pTimeStamp)
这些函数从m_fd的数据成员ftLastWriteTime、ftLastAccessTime和ftCreationTime 复制数据。

CFindFile 还有一些辅助函数用于检查文件的属性。

BOOL IsDots()
如果文件是"." 或 ".." 目录就返回true。

BOOL MatchesMask(DWORD dwMask)
将文件的属性和dwMask (通常是一些FILE_ATTRIBUTE_* 属性的组合)比较,看看查找到的文件是是否有指
定的属性如果文件属性包含dwMask指定的位掩码,就返回true。

BOOL IsReadOnly()
BOOL IsDirectory()
BOOL IsCompressed()
BOOL IsSystem()
BOOL IsHidden()
BOOL IsTemporary()
BOOL IsNormal()
BOOL IsArchived()
这些函数是MatchesMask() 函数的更直观的替代者,它们通常只是测试属性中的某一个,比如,
IsReadOnly() 就是调用MatchesMask(FILE_ATTRIBUTE_READONLY)。

4 个解决方案

#1


再说一下,这论坛发完帖子不可以编辑,不是很好,刚发完,觉得排版不好,应该


/************************华丽的分割线*******************************/


算了,大家将就着看下吧,权当消遣了~

#2


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#3


该回复于2011-08-12 09:45:42被版主删除

#4


谢谢楼主分享!!!

#1


再说一下,这论坛发完帖子不可以编辑,不是很好,刚发完,觉得排版不好,应该


/************************华丽的分割线*******************************/


算了,大家将就着看下吧,权当消遣了~

#2


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#3


该回复于2011-08-12 09:45:42被版主删除

#4


谢谢楼主分享!!!