VC编程改变指定的文件或文件夹的属性
文件是数据在磁盘上最常用的一种存放形式,也是在程序设计中与之经常打交道的一种编程对象,不少程序尤其是数据传输和处理类的应用程序更是需要频繁的创建、读取和写入文件。对于一些要求不是很严格的程序,我们往往只关心文件的内容是否正确、文件大小是否有增减或是再严格一些,看文件名是否符合规定等等。以上这些要素对于大多数程序而言显然是可以满足实际需求的,但对于某些特殊行业的一些有着比较严格要求的软件系统,仅有以上要素还是远远不够的,往往还需要对文件的所有属性诸如文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件的读写、文件的隐现等等进行提取处理与重新设置。例如,修改文件的读写隐现等属性,可以实现文件的保护和控制,尤其是修改文件的产生修改和访问时间,可以避免因防病毒更改系统时间而造成的文件修改时间的紊乱所形成的不便。在DOS下文件的属性可以用DOS命令加以修改,在WINDOWS下,可以通过右键的属性改变一组文件和文件夹的读写属性,但是却不能修改文件的产生修改和访问时间,并且不能修改子目录下的文件和文件夹的属性。
本实例基于Windows的API,设计了通用的文件和文件夹的属性(包括文件的产生修改和访问时间以及读写隐现等)的修改方法,并实现了其Visual C++程序编码。程序运行后,点击"修改属性"按钮,就可以将项目文件夹中的"2.doc"文档的属性修改的与"1.doc"文档一致。
一、实现方法
关于文件的全部属性信息,总计有以下以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和文件的长度可以通过CFile类比较方便的获得,而对于其他几种属性的获取和设置就无能为力了。
Windows中的API函数组提供了用于文件读写、属性设置的众多API函数,例如:
HANDLE CreateFile( LPCTSTR, DWORD, DWORD,LPSECURITY_ATTRIBUTES, DWORD,DWORD,HANDLE );
该函数产生或者打开一个系统对象,并返回一个用以访问该对象的句柄,这些对象可以是文件、文件夹、管道等。
HANDLE FindFirstFile( LPCTSTR, LPWIN32_FIND_DATA );
该函数在指定目录寻找与指定文件名匹配的文件和文件夹,并返回一个查询句柄。
BOOL FindNextFile( HANDLE,LPWIN32_FIND_DATA );
该函数继续一个由查询句柄指定的查询过程。
BOOL FindClose( HANDLE );
该函数关闭指定的查询句柄,结束指定的查询。
DWORD GetFileAttributes( LPCTSTR );
该函数检取指定的文件的属性信息。
BOOL SetFileAttributes( LPCTSTR,DWORD );
该函数设置指定的文件的属性信息。
Windows中的API函数组提供了有关时间转换的众多API函数,例如:
BOOL SystemTimeToFileTime( CONST SYSTEMTIME *,LPFILETIME );
该函数将系统时间转换成文件时间,文件时间是一个64位长度的数,表示从1601年1月1日起的时间偏移,以千万分之一秒为单位。
BOOL LocalFileTimeToFileTime(CONST FILETIME *,LPFILETIME );