您的位置:首页 > 其它

修改文件创建日期,访问日期和修改日期

2010-01-06 19:39 309 查看
有时出于一些同步了或者其他什么乱七八糟的原因,我们需要修改一个文件的创建日期等内容,网上找了一下算法,记下来以备后用.

void CModifyBINDlg::OnButton1()
{
 // TODO: Add your control notification handler code here

//定义一个和文件信息兼容的结构,用于保存获取的信息
 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;

//获取文件的信息

 WIN32_FIND_DATA ffd ;
 HANDLE hFind = FindFirstFile(m_FileName,&ffd);

  FindClose(hFind); 

//保存文件的信息
 FILE_INFO FileInfo;
 memset(&FileInfo,0,sizeof(FILE_INFO));
 //将文件属性信息保存到FileInfo中备用
 strcpy(FileInfo.szFileTitle,ffd.cFileName);
 FileInfo.dwFileAttributes = ffd.dwFileAttributes;
 FileInfo.ftCreationTime = ffd.ftCreationTime;
 FileInfo.ftLastAccessTime = ffd.ftLastAccessTime;
 FileInfo.ftLastWriteTime = ffd.ftLastWriteTime;
 FileInfo.nFileSizeHigh = ffd.nFileSizeHigh;
 FileInfo.nFileSizeLow = ffd.nFileSizeLow;
 //修改文件的生成日期信息
 SYSTEMTIME time;
    FILETIME t_ft;
 FileTimeToSystemTime(&(ffd.ftCreationTime), &time);
 time.wYear = 2000;
 time.wMonth = 1;
 time.wDay = 1;
 time.wDayOfWeek = 6;
    SystemTimeToFileTime(&time, &t_ft);
 //把修改的日期写回文件
 FileInfo.ftCreationTime = t_ft;
 BOOL bResult ;
 CFile file(m_FileName,CFile::modeWrite|CFile::typeBinary);   //打开文件
 bResult = SetFileTime((HANDLE)file.m_hFile, //待写入的文件句柄
  &FileInfo.ftCreationTime, //文件的创建时间
  &FileInfo.ftLastAccessTime, //文件最近一次的访问时间
  &FileInfo.ftLastWriteTime); //文件最近一次的修改时间
 if(!bResult)
    {
        DWORD dwErr = GetLastError();
    }
 
 //SetFileAttributes();
 file.Close();       //关闭文件

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  file struct 算法
相关文章推荐