王朝百科
分享
 
 
 

WIN32_FIND_DATA

王朝百科·作者佚名  2010-06-14  
宽屏版  字体: |||超大  

关于文件的全部属性信息,总计有以下以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和文件的长度可以通过CFile类比较方便的获得,而对于其他几种属性的获取和设置就无能为力了。

在用findfirst()和findnext()函数去查找磁盘文件时经常使用的一个数据结构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()函数根据当前的文件存放路径查找该文件来把待操作文件的相关属性读取到WIN32_FIND_DATA结构中去:

WIN32_FIND_DATA ffd ;

HANDLE hFind = FindFirstFile("c:\test.dat",&ffd);

在使用这个结构时不能手工修改这个结构中的任何数据,结构对于开发人员来说只能作为一个只读数据,其所有的成员变量都会由系统完成填写。在MSDN帮助中可以查找到关于WIN32_FIND_DATA结构的更加详细的说明。

三、 文件属性信息的获取与更改

为了更好的保存获取到的文件属性信息,对应于文件属性构造一个自定义的FILE_INFO数据结构,获取的属性信息可暂存于此:

typedef struct _FILE_INFO {

TCHAR szFileTitle[128]; //文件的标题名

DWORD dwFileAttributes; //文件的属性

FILETIME ftCreationTime; //文件的创建时间

FILETIME ftLastAccessTime; //文件的最后访问时间

FILETIME ftLastWriteTime; //文件的最后修改时间

DWORD nFileSizeHigh; //文件大小的高位双字

DWORD nFileSizeLow; //文件大小的低位双字

DWORD dwReserved0; //保留,为0

DWORD dwReserved1; //保留,为0

} FILE_INFO, * PFILE_INFO;

首先用FindFirstFile()函数将文件属性获取到WIN32_FIND_DATA 结构对象FindFileData中去,之后可以用FindClose()将其关闭,并把FindFileData中的有关文件属性信息的内容复制到自定义结构FILE_INFO的结构对象FileInfo中备用。下面是关于这部分描述的部分关键代码:

//声明结构对象

FILE_INFO FileInfo;

WIN32_FIND_DATA FindFileData;

……

//获取文件属性信息

FindClose(FindFirstFile("Test.txt",&FindFileData));

memset(&FileInfo,0,sizeof(FILE_INFO));

……

//将文件属性信息保存到FileInfo中备用

strcpy(FileInfo.szFileTitle,myFile.GetFileTitle());

FileInfo.dwFileAttributes = FindFileData.dwFileAttributes;

FileInfo.ftCreationTime = FindFileData.ftCreationTime;

FileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;

FileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime;

FileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh;

FileInfo.nFileSizeLow = FindFileData.nFileSizeLow;

……

在获取到文件的原始属性信息后既可以原封不动的将属性重新写到文件,也可以对其中某一项或某几项属性内容进行修改后再行写入文件,从而达到更改文件属性的目的。比如可以用SetFileTime()函数设置文件的创建时间、最近一次访问时间以及最近一次修改的时间等等:

SetFileTime((HANDLE)destFile.m_hFile, //待写入的文件句柄

&FileInfo.ftCreationTime, //文件的创建时间

&FileInfo.ftLastAccessTime, //文件最近一次的访问时间

&FileInfo.ftLastWriteTime); //文件最近一次的修改时间

也可以用SetFileAttributes() 函数实现对文件属性的修改:

SetFileAttributes(FileInfo.szFileTitle,FileInfo.dwFileAttributes);

至于文件名的修改则更加简单,直接在创建文件时在CreateFile()或CFile类的成员函数Open里直接对文件名参数进行设置即可。

移动一个文件,一般可使用:

BOOL WINAPI MoveFile(LPCSTR Existing, LPCSTR Target);

其中 Existing是现有文件或目录,Target是目标文件或目录。此函数还可以用来对文件改名。例:

MoveFile("D:\Temp\a.txt", "E:\MyPath\b.txt"); 将D:Tempa.txt移动到E:MyPath并改名为b.txt

>API中的CopyFile:

BOOL WINAPI CopyFile(LPCSTR oldFileName, LPCSTR newFileName, BOOL failIfExists);

oldFileName: 原始文件名;

newFileName: 目标文件名;

failIfExists: 目标文件已存在时的处理办法。TRUE则不覆盖并返回失败标记,FALSE则覆盖。

返回值:TRUE代表成功,FALSE代表失败。

>粘贴又是哪个函数呢?

粘贴的功能不是一个函数能够实现的.对剪贴板的操作Windows有一系列函数.粘贴必须要用的是 OpenClipboard(), GetCipboardData()和CloseClipboard().

拷贝-粘贴的对象为文本或其他二进数据(如图像)时可能还要辅助其他的API.

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有