正在学习MFC如何获得一个目录下的文件名,现在了解到要使用两个API函数FindFirstFile和FindNextFile先使用前者找到第一个文件,再用后者找到第二个,如此进行,知道找不到。
首先对两个函数做简要介绍:
FindFirstFile Function:
HANDLE WINAPI FindFirstFile(
__in LPCTSTR lpFileName,
__out LPWIN32_FIND_DATA lpFindFileData
);
Parameters
lpFileName 指向一个字符串,代表要寻找的文件名。
lpFindFileData 指向一个缓冲区,函数会在缓冲区中返回一个WIN32_FIND_DATA结构
Return Value
如果成功,会返回一个handle可以给FindNextFile或者FindClose使用;如果失败,返回INVALID_HANDLE_VALUE。
WIN32_FIND_DATA Structure
Contains information about the file that is found by the FindFirstFile, FindFirstFileEx, or FindNextFile function.
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; 找到的文件的属性
FILETIME ftCreationTime; 创建日期
FILETIME ftLastAccessTime;最后访问日期
FILETIME ftLastWriteTime; 最后写入日期
DWORD nFileSizeHigh; 文件长度的高32位
DWORD nFileSizeLow; 文件长度的低32位
DWORD dwReserved0; 扩展的文件标记
DWORD dwReserved1; 保留
TCHAR cFileName[MAX_PATH];本次找到的文件名
TCHAR cAlternateFileName[14]; 文件的8.3文件名
} WIN32_FIND_DATA,
*PWIN32_FIND_DATA,
*LPWIN32_FIND_DATA;
其中,文件的大小计算方法:
(nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow.
DWORD dwReserved0; 扩展的文件标记,之前一直定义为未使用,而在目前的MSDN上说明为"If the dwFileAttributes member includes the FILE_ATTRIBUTE_REPARSE_POINT attribute, this member specifies the reparse point tag."看起来好像是能否返回文件的所属类型。
cFileName 中只有文件名称,不包括路径。
FindNextFile Function:
BOOL WINAPI FindNextFile(
__in HANDLE hFindFile,
__out LPWIN32_FIND_DATA lpFindFileData
);
Parameters
hFindFile FindFirstFile或者FindFirstFileEx返回的handle
lpFindFileData 和FindFirstFile的一样,用来返回找到的文件信息
Return Value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero (0). To get extended error information, call GetLastError.
If no matching files can be found, the GetLastError function returns ERROR_NO_MORE_FILES.
转自:获得一个目录下的文件名(作者:LooL 于2007-10-15上传)
原文网址http://www.aogosoft.com/downpage.asp?mode=viewtext&id=154