FileTime 和 CTime之间的转换问题

本文详细介绍了在程序开发中将FileTime转换为CTime和反之的操作方法,包括使用内置函数进行转换的步骤及注意事项。适用于需要在Windows系统下进行文件时间操作的开发者。

FileTime 和 CTime之间的转换问题
摘自:FileTime 和 CTime之间的转换问题


1.  FileTime  转换成  CTime 
方法(1) 
     FILETIME  ft; 
     CTime  time(ft); 

方法(2) 
   FILETIME  ft; 
   SYSTEMTIME  st; 
   BOOL  bSuccess=::FileTimeToSystemTime(&ft,  &st) 
   if  (bSuccess)      //转换为SYSTEMTIME成功,下面转换成CTime 
         CTime  time(st); 

2.  CTime  转换成  FileTime 
   CTime  time(CTime::GetCurrentTime()); 
   SYSTEMTIME  st; 
   time.GetAsSystemTime(st); 
   FILETIME  ft; 
   ::SystemTimeToFileTime(&st,  &ft); 

修改代码,解决问题:在mfc中修改word文档访问时间失败BOOL CWordctrlDlg::SetWordFileTimes(LPCTSTR lpszFilePath, CTime createTime, CTime modifyTime, CTime accessTime) { // 检查文件路径有效性 if (lpszFilePath == NULL || _tcslen(lpszFilePath) == 0) { AfxMessageBox(_T("错误:文件路径为空!")); return FALSE; } // 检查文件是否存在 if (_taccess(lpszFilePath, 0) == -1) { AfxMessageBox(_T("错误:文件不存在!\r\n") + CString(lpszFilePath)); return FALSE; } // 转换时间格式 FILETIME ftCreate, ftModify, ftAccess; CTimeToFileTime(createTime, ftCreate); CTimeToFileTime(modifyTime, ftModify); CTimeToFileTime(accessTime, ftAccess); // 尝试直接一次性设置所有时间(推荐方式) HANDLE hFile = CreateFile(lpszFilePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, // 移除FILE_FLAG_NO_BUFFERING NULL); if (hFile == INVALID_HANDLE_VALUE) { DWORD dwError = GetLastError(); CString strErr; strErr.Format(_T("打开文件失败!错误代码: %d\r\n可能原因:文件被占用或权限不足"), dwError); AfxMessageBox(strErr); return FALSE; } BOOL bSuccess = SetFileTime(hFile, &ftCreate, &ftAccess, &ftModify); DWORD dwError = 0; if (!bSuccess) { dwError = GetLastError(); // 如果一次性设置失败,尝试分别设置 CloseHandle(hFile); // 先设置创建修改时间 hFile = CreateFile(lpszFilePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile != INVALID_HANDLE_VALUE) { bSuccess = SetFileTime(hFile, &ftCreate, NULL, &ftModify); CloseHandle(hFile); // 再单独设置访问时间 if (bSuccess) { hFile = CreateFile(lpszFilePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile != INVALID_HANDLE_VALUE) { bSuccess = SetFileTime(hFile, NULL, &ftAccess, NULL); if (!bSuccess) dwError = GetLastError(); CloseHandle(hFile); } else { bSuccess = FALSE; dwError = GetLastError(); } } else { dwError = GetLastError(); } } else { bSuccess = FALSE; dwError = GetLastError(); } } if (!bSuccess) { CString strErr; strErr.Format(_T("设置时间失败!错误代码: %d"), dwError); AfxMessageBox(strErr); } return bSuccess; }
最新发布
09-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值