有时出于一些同步了或者其他什么乱七八糟的原因,我们需要修改一个文件的创建日期等内容,网上找了一下算法,记下来以备后用.
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(); //关闭文件
}