01、文章目录

02、CFileFind类——Introduce

CObject是CFileFind的基类,MFC类CFileFind执行本地文件查找,是CGopherFileFind和CFtpFileFind的基类,后两类用于Internet文件查找。
CFileFind包括的成员函数有开始查找、定位文件、返回标题名或路径。对于Internet查找来说,GetFileURL返回文件的URL。

CFileFind是为另两类查找特殊服务器设计的MFC类的基类,CGopherFileFind在Gopher服务器上工作,CFtpFileFind在FTP服务器上工作,这些类为用户查找文件提供了一种无缝机制,与服务器协议、文件类型、地点、本地机器或远程服务器无关。

使用CFileFind类需声明头文件:#include <afx.h>

以下代码将当前目录下的文件枚举出来并打印每个文件名:

	CFileFind finder;
	BOOL bWorking = finder.FindFile("*.*");
	while(bWorking)
	{
		bWorking = finder.FindNextFile();
		cout << (LPCTSTR)finder.GetFileName() << endl;
	}

为使示例简单,此代码使用标准C++库函数cout类,cout行可由调用CListBox::AddString来代替。
声明:此为C++代码编程,如果你要用我平时举例那种方式来写这段代码,需要测试可行性,因为这里涉及到MFC类库。

03、CFileFind类——Member Function

3.1 构造函数

说明:当构造一个CFileFind对象后,调用此成员函数!

CFileFind::CFileFind

//构造
CFileFind();
3.2 GetLength

说明:获取找到文件的字节长度。调用之前必须至少调用一次FindNextFile。

CFileFind::GetLength

DWORD GetLength()const;

返回值:找到文件的长度,以字节为单位。
GetLength用WIN32_FIND_DATA的nFileSizeLow成员来获取并返回文件长度的低位字。如果文件长于4G,则使用GetLength64成员函数。

此成员函数示例请参考msdn,上面例子很详细,不清楚怎么用可以去看看,我这里举个简单例子:

CFileFind finder;
	BOOL bWorking = finder.FindFile("*.*");
	while(bWorking)
	{
		bWorking = finder.FindNextFile();
		cout << (ULONGLONG)finder.GetLength() << endl;
	}
3.3 GetFileName

说明:获取找到文件的文件名,调用之前必须至少调用一次FindNextFile。GetFileName是CFileFind成员函数中返回某种形式的文件名的函数,下面的列表描述了这三个函数及其区别:

CFile::Find::GetFileName

virtual CString GetFileName()const;

返回值:最近找到的文件的文件名。

成员函数(member function) 描述(description)
GetFileName 返回文件名,包括扩展文件名。例如:调用GetFileName来产生一个关于文件c::\myhtml\myfile.txt的用户信息,将会返回文件名:myfile.txt
GetFilePath 返回全部文件的路径。例如:调用GetFilePath用于产生一个关于文件c:\myhtml\myFile.txt的用户信息,将会返回文件路径:c:\myhtml\myFile.txt
GetFileTitle 返回文件名,不包括扩展名。例如:调用GetFileTitle来产生一个关于文件c::\myhtml\myfile.txt的用户信息,将会返回文件名:myfile
3.4 GetFilePath

说明:获取指定文件的全路径,调用此成员函数之前必须至少调用一次FindNextFile。

CFileFind::GetFilePath

virtual CString GetFilePath()const;

返回值:指定文件的全路径。

成员函数(member function) 描述(description)
GetFileName 返回文件名,包括扩展文件名。例如:调用GetFileName来产生一个关于文件c::\myhtml\myfile.txt的用户信息,将会返回文件名:myfile.txt
GetFilePath 返回全部文件的路径。例如:调用GetFilePath用于产生一个关于文件c:\myhtml\myFile.txt的用户信息,将会返回文件路径:c:\myhtml\myFile.txt
GetFileTitle 返回文件名,不包括扩展名。例如:调用GetFileTitle来产生一个关于文件c::\myhtml\myfile.txt的用户信息,将会返回文件名:myfile
3.5 GetFileTitle

说明:调用此成员函数获取查找文件的标题,调用之前必须至少调用一次FindNextFile。

CFileFind::GetFileTitle

virtual CString GetFileTitle()const;

返回值:文件标题

成员函数(member function) 描述(description)
GetFileName 返回文件名,包括扩展文件名。例如:调用GetFileName来产生一个关于文件c::\myhtml\myfile.txt的用户信息,将会返回文件名:myfile.txt
GetFilePath 返回全部文件的路径。例如:调用GetFilePath用于产生一个关于文件c:\myhtml\myFile.txt的用户信息,将会返回文件路径:c:\myhtml\myFile.txt
GetFileTitle 返回文件名,不包括扩展名。例如:调用GetFileTitle来产生一个关于文件c::\myhtml\myfile.txt的用户信息,将会返回文件名:myfile
3.6 GetFileURL

说明:调用此函数获得指定的URL,调用之前必须至少调用一次FindNextFile。

CFileFind::GetFileURL

virtual CString GetFileURL()const;

返回值:一个完整的URL。
GetFileURL与GetFilePath基本一样,但URL的形式为:file://path.例如,调用GetFileURL获取myfile.txt完整的URL,将返回URL:file://c:\myhtml\myfile.txt。

3.7 GetRoot

说明:调用此成员函数获取找到的文件的根,调用之前必须至少调用一次FindNextFile。

CFileFind::GetRoot

virtual CString GetRoot()const;

返回值:正在活动的查找的根
此成员函数返回开始查找使用的指定驱动器和路径名。例如:用*.dat调用FindFile::GetRoot返回一个空字符串。传递一个路径如c:\windows\system*.dll,则GetRoot返回c:\windows\system\。

3.8 GetGreationTime

说明:调用此成员函数获取指定对象的创建时间。调用此GetGreationTime成员函数之前必须至少调用一次FindNextFile。
ps:注意不是所有的系统使用相同的语义实现此函数返回的时间戳。如果支持的文件系统或服务器不支持保持挤时间属性,则此函数会返回与其他时间函数相同的值。可参阅Win32_FIND_DATA结构了解时间格式信息。

CFileFind::GetGreationTime

virtual BOOL GetGreationTime(FILETIME* pFileTime)const;
virtual BOOL GetGreationTime(CTime& refTime)const;

返回值:如果成功,则返回非零值,否则返回0.仅在此CFileFind对象从未调用过FindNextFile时,函数才返回0.

参数:
pFileTime:指向文件创建的FILETIME结构
refTimeCTime:对象的参考

3.9 GetLastAccessTime

说明:调用此成员函数获得最后一次访问文件的时间。调用此GetLastAccessTime之前必须至少调用一次FindNextFile.
ps:注意不是所有的系统使用相同的语义实现此函数返回的时间戳。如果支持的文件系统或服务器不支持保持挤时间属性,则此函数会返回与其他时间函数相同的值。可参阅Win32_FIND_DATA结构了解时间格式信息。有些操作系统中,返回时间是依文件所在地的时区来决定的。

CFileFind::GetLastAccessTime

virtual BOOL GetLastAccessTime(CTime& refTime)const;
virtual BOOL GetLastAccessTime(FILETIME* pFileTime)const;

返回值:如果成功,则返回非零值,否则返回0.仅在此CFileFind对象从未调用过FindNextFile时,函数才返回0.

参数:
pFileTime:包含最后一次访问文件的时间的FILETIME结构指针
refTime:CTime对象的参考

3.10 GetLastWriteTime

说明:调用此成员函数获得最后一次改变文件的时间。调用GetLastWriteTime之前必须至少调用一次FindNextFile。
ps:注意不是所有的系统使用相同的语义实现此函数返回的时间戳。如果支持的文件系统或服务器不支持保持挤时间属性,则此函数会返回与其他时间函数相同的值。可参阅Win32_FIND_DATA结构了解时间格式信息。有些操作系统中,返回时间是依文件所在地的时区来决定的。

CFileFind::GetLastAccessTime

virtual BOOL GetLastWriteTime(CTime& refTime)const;
virtual BOOL GetLastWriteTime(FILETIME* pFileTime)const;

返回值:如果成功,则返回非零值,否则返回0.仅在此CFileFind对象从未调用过FindNextFile时,函数才返回0.

参数:
pFileTime:包含最后一次访问文件的时间的FILETIME结构指针
refTime:CTime对象的参考

3.11 MatchesMask

说明:调用此成员函数测试找到的文件的属性。

CFileFind::GetLastAccessTime

virtual BOOL MatchesMask(DWORD dwMask)const;

返回值:如果成功,则返回非零值,否则返回0.要得到更多的出错信息,可调用Win32函数GetLastError。

参数:
dwMask:指定找到文件的一个或多个属性,有WIN32_FIND_DATA结构标识。为查找多重属性,可用OR(|)操作符,以下为可接收的属性:

  • FILE_ATTRIBUTE_ARCHIVE:文件为档案文件。应用使用此属性标明文件可以备份和移动。
  • FILE_ATTRIBUTE_COMPRESSED:文件或目录为压缩。对文件来说,表明文件中的所有数据都是压缩的;如果为目录,表明新建文件和子目录缺省为压缩的。
  • FILE_ATTRIBUTE_DIRECTORY:文件为目录。
  • FILE_ATTRIBUTE_NORMAL:文件没有其他属性设置,此属性仅可单独使用,任何其他属性覆盖此属性。
  • FILE_ATTRIBUTE_READONLY:文件只读,应用可读出文件但不可写、删文件。
  • FILE_ATTRIBUTE_HIDDEN:文件隐藏,不包含在通常的目录列表。
  • FILE_ATTRIBUTE_SYSTEM:文件是操作系统的一部分或为操作系统专用。
  • FILE_ATTRIBUTE_TEMPORARY:文件用于临时存储,只有在完全必要时应用才写文件。大多数文件数据存储于存储区而不存入介质,因为文件很快被删除。
3.12 IsDots

说明:调用此成员函数循环遍历文件,测试当前目录和父目录标记。

CFileFind::IsDots

virtual BOOL IsDots()const;

返回值:如果找到文件的文件名包含“.”或“…”,表明找到的文件实际上是一个目录,则返回非零值,否则返回0

3.13 IsSystem

说明:调用此成员函数判断找到的文件是否是系统文件,系统文件用WIN32_FIND_DATA结构的文件属性标识FILE_ATTRIBUTE_SYSTEM来标识,系统文件时操作系统的一部分或专用于操作系统。

CFileFind::IsSystem

BOOL IsSystem()const;

返回值:如果成功,则返回非零值,否则返回0

3.14 IsDirectory

说明:调用此成员函数判断找到的文件是否是一个目录。目录文件用WIN32_FIND_DATAj结构的文件属性标识FILE_ATTRIBUTE_DIRECTORY标识。

CFileFind::IsDirectory

BOOL IsDirectory()const;

返回值:如果成功,则返回非零值,否则为0

3.15 IsReadOnly

说明:调用此成员函数判断找到的文件是否是只读文件。一个制度文件用WIN32_FIND_DATA结构的文件属性FILE_ATTRIBUTE_READONLY标识,应用可以读此类文件但不可写或删此文件。

CFileFind::IsReadOnly

BOOL IsReadOnly()const;

返回值:如果成功,则返回非零值,否则为0

3.16 IsNormal

说明:调用此成员函数判断找到的文件是否是一个常规文件。常规文件用WIN32_FILE_DATA结构的文件属性标识FILE_ATTRIBUTE_NORMAL标识,一个常规文件不包括其他属性设置,所有其他属性覆盖此属性。

CFileFind::IsNormal

BOOL IsNormal()const;

返回值:如果成功,则返回非零值,否则为0

3.17 IsCompressed

说明:调用此成员含糊判断找到的文件是否是压缩文件。压缩文件用WIN32_FIND_DATA结构的文件属性标识FILE_ATTRIBUTE_COMPRESSED标识,对于一个文件来说,压缩属性表明文件中所有的数据都是压缩的。对于一个目录来说,新创建的文件和子目录都是用这个缺省的压缩属性。

CFile::IsCompressed

BOOL IsCompreessed()const;

返回值:如果成功,则返回非零值,否则为0

3.18 IsArchived

说明:调用此成员函数判断找到文件是否是档案文件。应用为一个可备份和可移动的档案文件标记一个FILE_ATTRIBUTE_ARCHIVE类型,此类型有WIN32_FIND_DATA指定。

CFileFind::IsArchived

BOOL IsArchived()const;

返回值:如果成功,则返回非零值,否则为0

3.19 IsHidden

说明:调用此成员函数判断找到的文件是否是隐藏文件。隐藏文件用WIN32_FIND_DATA结构的文件属性表示FILE_ATTRIBUTE_HIDDEN标识,它不包含在常用的文件列表中。

CFileFind::IsHidden

BOOL IsHidden()const;

返回值:如果成功,则返回非零值,否则为0

3.20 IsTemporary

说明:调用此成员函数判断找到的文件是否是一个临时文件,一个临时文件用WIN32_FIND_DATA结构的文件属性FILE_ATTRIBUTE_TEMPORARY标识,临时文件用于临时存储,应用只有在完全必要时才写文件,大多数文件的数据保留与储存区而不存入介质,因为文件很快被删除。

CFileFind::IsTemporary

BOOL IsTemporary()const;

返回值:如果成功,则返回非零值,否则为0

3.21 Close

说明:调用此成员函数结束查找、重新设置背景、释放资源。调用Close后,在调用FindFile开始新查找之前无需立即构造一个新CFileFind对象。

CFileFind::Close

void Close();
3.22 FindNextFile

说明:调用次成员函数,从以前对FindFile的调用开始继续查找。你必须在调用一些成员函数之前调用一次FindNextFile。上面的函数已经有说明,这里就不全部列举了。

CFileFind::FindNextFile

virtual BOOL FindNextFile();

返回值:如果还有文件,则返回非零值;如果为最后一个文件,则为0.以前对FindFile或FindNextFile调用均返回0。

3.23 FindFile

说明:调用次成员函数打开一个文件查找。当调用FindFile开始查找后,调用FindNextFile获取下一个文件。

CFileFind::FindFile

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

返回值:如果成功,则返回非零值,否则为0.如果失败,可调用Win32函数GetLastError获取出错原因.

参数:
pstrName:指向待找文件名字符串,如果为NULL,则查找以*.* 形式进行
dwUnused:保留,以使FindFile在派生类多性,必须为0。

04、总结

上面CFileFind类的所有函数均来自官方MFC文档。
此篇文章没有实例,以前写过一篇文章包含了此实例,这里贴上链接
https://blog.csdn.net/m0_43458204/article/details/106794703

版权声明:转载请注明出处,谢谢!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐