WINDOWS平台C语言获取文件的一些属性.doc_第1页
WINDOWS平台C语言获取文件的一些属性.doc_第2页
WINDOWS平台C语言获取文件的一些属性.doc_第3页
WINDOWS平台C语言获取文件的一些属性.doc_第4页
WINDOWS平台C语言获取文件的一些属性.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows平台有一个WIN32_FIND_DATA结构,用来存储文件的一些属性(这里指的属性和下面结构中文件属性成员不同。这里的属性是指下面结构的所有成员)。该结构的定义如下。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;可以使用FindFirstFile() 和 FindNextFile() 函数可以得到 文件(包括文件夹)的WIN32_FIND_DATA结构信息。FindFirstFile的原型如下:FindFirstFile()函数中,第一个参数是一个字符串。可以是一个路径名或者文件名,并且支持通配符 * 和 ?。比如想查找D盘下的所有文件,可以写成D:*.* 或者 D:*。如果只想查找D盘下的txt文件,那么可以写成D:*.txt。 第二个参数是指向WIN32_FIND_DATA结构体的一个指针。正如函数的名字FindFirstFile那样, 该函数会查找第一个符合查找条件的文件(使用通配符可以有多少文件满足查找条件)。然后把这个文件的一些信息写入这个结构里面。如果第一个参数没有使用通配符,而是一个文件名,那么将只能找到一个符合条件的文件。函数的返回值是一个句柄HANDLE,说白了也就是一个整型。这个返回值可以用来查找下一个符合查找条件的文件。这就是下面的FindNextFile函数了。如果函数调用失败,将返回INVALID_HANDLE_VALUEFindNextFile的原型如下第一个参数就是FindFirstFile函数的返回值。第二个参数和FindFirstFile一样,在一个指针,用来存放被查找到的文件的一些信息。如果查找成功,函数返回非0值。否则返回0。可以调用GetLastError()函数来查看失败原因。如果没有符合要求的文件了,那么也将返回0。此时,调用GetLastError()函数将返回ERROR_NO_MORE_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 ) coutinvalid handle value GetLastError()endl;elsecoutfileAttr.cFileNameendl; /输出查找到的文件名while( FindNextFile(handle, &fileAttr) )coutfileAttr.cFileNameendl; /输出每一个查找到的文件名if( GetLastError() = ERROR_NO_MORE_FILES )cout查找完毕endl;else cout查找过程出现错误endl;FindClose(handle);return 0;现在看一下WIN32_FIND_DATA结构的一些成员信息。首先看一下文件的大小信息。该信息用了两个成员存储。分别是:DWORD nFileSizeHigh; / 文件长度高32位 DWORD nFileSizeLow; / 文件长度低32位其中,单位是 字节数。由于nFileSizeHigh存储的是文件长度的高位,所以当文件的大小小于MAXDWORD时,该成员的值为0。最后,可以用 (nFileSizeHigh * (MAXDWORD+1) + nFileSizeLow 来计算文件大小。文件夹的大小是 0 。现在看一下与文件有关的时间属性。有三个时间,创建时间、访问时间、修改时间。三者都差不多。只需弄懂一个,其他两个就自然知道怎么用了。从文章最前面的WIN32_FIND_DATA结构体可以看到其ftCreationTime 成员是一个FILETIME类型。声明如下:一眼看过去,都不知道怎么使用。就像C语言标准库里面的time()函数一样,返回一个从1970年到现在的秒数。这个值很难使用。还好Windows还提供了另外一个结构 SYSTEMTIME。其声明如下:这个结构看起来就有点像人使用的,刚才那个完全是机器使用的。同样,Windows提供了两者相互转换的函数.两个函数都需要对应结构体的指针。还有一个东西需要注意。通过FindFirstFile、FindNextFile获取的WIN32_FIND_DATA结构。其FILETIME成员的值都是使用UTC时间,就是中学地理学的格林尼治时间。我们中国用东8区时间。所以我们还要在这些成员值的基础上加上 8 小时。微软不推荐我们直接对FILETIME结构进行 加上 或者减少 某个时间。如果我们要转换成我们当地的时间(就是从UTC时间转换成东8区时间),可以使用函数 FileTimeToLocalFileTime。其声明如下:另外,不能就地修改。就是说,第一个参数和第二个参数要指向不同的内存。给一个例子吧。#include#includeusing namespace std;ostream& 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 )coutinvalid handle value GetLastError()endl;elsecoutfileAttr.cFileName size is (fileAttr.nFileSizeHigh * (MAXDWORD+1) + fileAttr.nFileSizeLow) endl;FileTimeToLocalFil

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论