《Windows平台C语言获取文件的一些属性》由会员分享,可在线阅读,更多相关《Windows平台C语言获取文件的一些属性(5页珍藏版)》请在金锄头文库上搜索。
1、Windows 平台有一个 WIN32_FIND_DATA 结构,用来存储文件的一些属性(这里指的属性和下面结构中文件属性成员不同。这里的属性是指下面结构的所有成员) 。该结构的定义如下。typedef struct _WIN32_FIND_DATA DWORD dwFileAttributes; /文件属性 FILETIME ftCreationTime; / 文件创建时间 FILETIME ftLastAccessTime; / 文件最后一次访问时间 FILETIME ftLastWriteTime; / 文件最后一次修改时间 DWORD nFileSizeHigh; / 文件长度高 32
2、 位 DWORD nFileSizeLow; / 文件长度低 32 位 DWORD dwReserved0; / 系统保留 DWORD dwReserved1; / 系统保留 TCHAR cFileName MAX_PATH ; / 长文件名 TCHAR cAlternateFileName 14 ; / 8.3 格式文件名 WIN32_FIND_DATA, *PWIN32_FIND_DATA;可以使用 FindFirstFile() 和 FindNextFile() 函数可以得到 文件(包括文件夹)的WIN32_FIND_DATA 结构信息。FindFirstFile 的原型如下:FindF
3、irstFile()函数中,第一个参数是一个字符串。可以是一个路径名或者文件名,并且支持通配符 * 和 ?。比如想查找 D 盘下的所有文件,可以写成 D:*.* 或者 D:*。如果只想查找 D 盘下的 txt 文件,那么可以写成 D:*.txt。第二个参数是指向 WIN32_FIND_DATA 结构体的一个指针。正如函数的名字FindFirstFile 那样, 该函数会查找第一个符合查找条件的文件(使用通配符可以有多少文件满足查找条件) 。然后把这个文件的一些信息写入这个结构里面。如果第一个参数没有使用通配符,而是一个文件名,那么将只能找到一个符合条件的文件。函数的返回值是一个句柄 HANDL
4、E,说白了也就是一个整型。这个返回值可以用来查找下一个符合查找条件的文件。这就是下面的 FindNextFile 函数了。如果函数调用失败,将返回 INVALID_HANDLE_VALUEFindNextFile 的原型如下第一个参数就是 FindFirstFile 函数的返回值。第二个参数和 FindFirstFile 一样,在一个指针,用来存放被查找到的文件的一些信息。如果查找成功,函数返回非 0 值。否则返回 0。可以调用 GetLastError()函数来查看失败原因。如果没有符合要求的文件了,那么也将返回 0。此时,调用 GetLastError()函数将返回 ERROR_NO_MO
5、RE_FILES。在使用完上面两个函数后,要记得使用 CloseFile(HANDLE hFindFile)函数来关闭这个句柄。上面三个函数需要包括 windows.h 头文件.说了这么多,下面给出一个例子代码。#include#includeusing namespace std;int main()WIN32_FIND_DATA fileAttr;HANDLE handle;handle = FindFirstFile(D:*, &fileAttr);if( handle = INVALID_HANDLE_VALUE ) cout#includeusing namespace std;os
6、tream& operator (ostream& os, const SYSTEMTIME& t)ost.wYear-t.wMonth-t.wDay ;ost.wHour: t.wMinute: t.wSecondendl;return os;int main()WIN32_FIND_DATA fileAttr;HANDLE handle;SYSTEMTIME sysTime;FILETIME localFileTime;handle = FindFirstFile(D:*.txt, &fileAttr);if( handle = INVALID_HANDLE_VALUE )coutinva
7、lid handle value GetLastError()endl;elsecoutfileAttr.cFileName size is (fileAttr.nFileSizeHigh * (MAXDWORD+1) + fileAttr.nFileSizeLow) endl;FileTimeToLocalFileTime(&fileAttr.ftCreationTime, &localFileTime); /转换成当地时间FileTimeToSystemTime(&localFileTime, &sysTime); /转换成人看的时间类型coutsysTimeendl;FindClose(handle);return 0;