背景
在某些情况下,我们需要对文件时间进行修改,在这里主要和大家分享一下修改文件创建时间、修改时间和访问时间的程序,C语言编写。
解决方案
我们主要调用Windows API,直接修改文件时间为自己任意设定的时间。在Windows系统中,SetFileTime函数可以直接对文件的时间属性进行修改,详细的API使用说明可以去Windows官网上查看:
BOOL SetFileTime(
HANDLE hFile,
CONST FILETIME *IpCreationTime, //文件创建时间
CONST FILETIME *IpLastAccessTime, //访问时间
CONST FILETIME *IpLastWriteTime //修改时间
);
实践
首先,我们创建一个txt文件:
新建txt文档
然后运行我们写好的程序:
程序运行截图然后我们再看文件的时间属性
运行程序后的文件时间
程序源码分享
#include
#include
#include
#include
int main(int argc, char *argv[])
{
//传参格式:filetime.exe test.txt -01-08 17:00:33
SYSTEMTIME spec_time;
sscanf(argv[2], "%d-%d-%d", &spec_time.wYear, &spec_time.wMonth, &spec_time.wDay);
sscanf(argv[3], "%d:%d:%d", &spec_time.wHour, &spec_time.wMinute , &spec_time.wSecond);
spec_time.wDayOfWeek = 1;
spec_time.wMilliseconds = 0;
HANDLE hFile = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Get file handle failed,error = %s\n", GetLastError());
return -1;
}
FILETIME ft, LocalFileTime;
SystemTimeToFileTime(&spec_time, &ft);
LocalFileTimeToFileTime(&ft, &LocalFileTime);
if(SetFileTime(hFile, &LocalFileTime, &LocalFileTime, &LocalFileTime))
{
printf("success\n");
}
else
{
printf("fail\n");
}
CloseHandle(hFile);
return 0;
}
下一篇文章我会分享一篇修改文件夹时间的程序,小朋友们可以提前尝试一下!