摘要: 文件的属性包括文件的产生修改和访问时间以及读写隐现等,在DOS下文件的属性可以用DOS命令加以修改,在WINDOWS下,可以通过右键的属性改变一组文件和文件夹的读写属性,但是却不能修改文件的产生修改和访问时间,并且不能修改子目录下的文件和文件夹的属性。本文基于Windows的API设计了通用的文件和文件夹的属性(包括文件的产生修改和访问时间以及读写隐现等)的修改方法,并实现了其Visual C++
程序编码。
---- 文件的属性的修改具有广泛的使用价值,修改文件的读写隐现等属性,可以实现文件的保护和控制,尤其是修改文件的产生修改和访问时间,可以避免因防病毒更改系统时间而造成的文件修改时间的紊乱所形成的不便,例如,对
程序员来说,编译时,系统有可能又重新编译那些修改时间紊乱的文件,造成不必要的麻烦。
---- 一、应用的API函数
---- 1、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 );
该函数设置指定的文件的属性信息。
---- 2、API中的时间函数组提供了有关时间转换的众多API函数,在本编码中用到的该函数组中的函数有:
BOOL SystemTimeToFileTime( CONST SYSTEMTIME *,LPFILETIME );
该函数将系统时间转换成文件时间,文件时间是一个64位长度的数,
表示从1601年1月1日起的时间偏移,以千万分之一秒为单位。
BOOL LocalFileTimeToFileTime(CONST FILETIME *,LPFILETIME );
该函数将本时区的文件时间转换成格林威治时间的文件时间。
BOOL SetFileTime( HANDLE,CONST FILETIME*,CONST FILETIME *,CONST FILETIME * );
该函数设置文件产生修改和访问的时间。
---- 二、编码实现
---- 1、首先建立一个基于对话框的工程,在对话框窗体中放置以下控制并通过类管理向导为这些控制添加适当变量:
文件名编辑框,输入要改变的文件的全路径,文件名中可以有通配符*和?。变量类型CString,名称m_FILENAME;
修改包括子目录文件的检查框,变量类型BOOL,名称m_DIRECTORY;
修改文件访问时间检查框,变量类型BOOL,名称m_ACCESS;
文件访问时间日编辑框,变量类型BOOL,名称m_ADAY;
文件访问时间月编辑框,变量类型BOOL,名称m_AMONTH;
文件访问时间年编辑框,变量类型BOOL,名称m_AYEAR;修改文件产生时间检查框,变量类型BOOL,名称m_CREATE;
文件产生时间日编辑框,变量类型BOOL,名称m_CDAY;
文件产生时间时编辑框,变量类型BOOL,名称m_CHOUR;
文件产生时间分编辑框,变量类型BOOL,名称m_CMINUTE;
文件产生时间月编辑框,变量类型BOOL,名称m_CMONTH;