简单示例
下面根据前面的讲述而给出一个简单的应用示例,通过此示例可以从指定的文件夹读取时间属性信息并可在经过修改后再回写进去(在此仅对最近修改时间进行处理,对于其他的时间属性可用类似的方法加以实现)。这里通过两个函数GetDirTime()和SetDirTime()来实现对文件夹时间信息的获取与更改处理,下面就以注释的形式对这两个函数的实现过程进行讲解:
// 获取指定文件夹的时间属性,入口参数DirName指定了待处理的文件夹,stime为一 // 指向SYSTEMTIME结构的指针 BOOL CSetForderTimeDlg::GetDirTime(CString DirName, SYSTEMTIME &stime){ // 打开文件夹 HANDLE hDir = CreateFile (DirName, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); FILETIME lpCreationTime; // 文件夹的创建时间 FILETIME lpLastAccessTime; // 对文件夹的最近访问时间 FILETIME lpLastWriteTime; // 文件夹的最近修改时间 // 获取文件夹时间属性信息 if (GetFileTime(hDir, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime)){ FILETIME ftime; FileTimeToLocalFileTime(&lpLastWriteTime, &ftime); // 转换成本地时间 FileTimeToSystemTime(&ftime, &stime); // 转换成系统时间格式 } CloseHandle(hDir); // 关闭打开过的文件夹 return retval; }
// 设置指定文件夹的时间属性,入口参数DirName指定了待处理的文件夹,new_time // 为一指向SYSTEMTIME结构的指针 BOOL CSetForderTimeDlg::SetDirTime(CString DirName, SYSTEMTIME new_stime){ // 打开目录的Win32 API调用 HANDLE hDir = CreateFile(DirName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); FILETIME lpCreationTime; // 文件夹的创建时间 FILETIME lpLastAccessTime; // 对文件夹的最近访问时间 FILETIME lpLastWriteTime; // 对文件夹的最近修改时间 SystemTimeToFileTime(&new_stime, &lpCreationTime); // 转换成文件时间格式 SystemTimeToFileTime(&new_stime, &lpLastAccessTime); SystemTimeToFileTime(&new_stime, &lpLastWriteTime); // 设置文件夹的时间属性 BOOL retval = SetFileTime(hDir, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime); CloseHandle(hDir); // 关闭文件夹 return retval; } |
至此,可以很方便的通过调用GetDirTime()和SetDirTime()函数来实现对任意指定文件夹时间属性的获取与设置,具体为:
SYSTEMTIME stime; // 系统时间结构对象 if (GetDirTime(m_Path, stime)) { // 如果获取文件夹时间属性成功,获取到的时间信息将保存在stime结构对象中 …… // 如果需要可以对获取到的时间属性进行修改,也可以保留不变 …… // 将修改后的时间属性回写到文件夹 SetDirTime(m_Path, stime); } |
小结
本文通过CreateFile()函数打开文件夹,并在以后的处理中将其以文件来对待,从而可以使用GetFileTime()、SetFileTime()等函数来对其时间属性进行获取与写入处理,可对包括根目录在内的任意文件夹进行时间属性设置。在数据的完整备份与复原等方面中有较好的应用前景。本文所述代码在Windows 2000 Professional下,由Microsoft Visual C++(www.cppentry.com) 6.0编译通过。
|