第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > c语言 获取文件修改时间 (C语言)获取并修改文件夹时间(创建时间 修改时间 访问

c语言 获取文件修改时间 (C语言)获取并修改文件夹时间(创建时间 修改时间 访问

时间:2023-10-15 04:33:57

相关推荐

c语言 获取文件修改时间 (C语言)获取并修改文件夹时间(创建时间 修改时间 访问

背景

在Windows系统下没有提供可以对文件夹时间属性修改的方法或者API,在上一篇文章中我们提到了文件时间的函数,那么我们可以以打开文件的方式打开文件夹,然后通过修改文件时间的API函数对文件夹时间进行访问获取并进行修改。

解决方案

首先,我们介绍一个函数CreateFile:

HANDLE CreateFile(

LPCTSTR lpFileName, // 文件名指针

DWORD dwDesiredAccess, // 访问模式

DWORD dwShareMode, // 共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //安全属性

DWORD dwCreationDisposition, // 创建方式

DWORD dwFlagsAndAttributes, // 文件属性

HANDLE hTemplateFile // 指向待复制属性的文件指针

);

当要对文件夹进行操作时,将第一个参数IpFileName设置为文件夹的名称或者路径;将访问模式设置为GENERIC_READ,对于文件夹属性信息的写入需要GENERIC_WRITE的帮助;由于CreateFile函数在进行文件夹操作的时候,不能以创建的方式进行,所以创建方式只能打开已经存在的对象,因此将dwCreationDisposition设置为OPEN_EXITSING;dwFlagsAndAttributes参数的设置是比较重要的,正是通过将该参数设置为FILE_FLAG_BACKUP_SEMANTICS属性才使CreateFile()函数来进行打开文件夹的操作。

实践

我们运行程序,获取一个文件夹的时间属性并对其进行修改

程序运行截图

,我们右键点开文件夹的属性,来验证程序的正确性:

验证看来程序是正确的,下面我们就进行修改,选择1:

修改成功程序截图我们看到程序返回Success成功,那么我们验证一下:

修改时间验证

创建时间修改

我们可以看到文件夹的时间属性修改成功!

下面我就分享一下程序源码,大家可以根据自己的情况进行更改,也可以留言提问题哟!

程序源码

#include

#include

#include

void print(FILETIME ftime)

{

char str[50];

SYSTEMTIME rtime;

FILETIME ltime;

memset(str,0,50);

FileTimeToLocalFileTime(&ftime,&ltime);

FileTimeToSystemTime(&ltime,&rtime); //将文件时间转化为系统时间

sprintf(str, "%04u-%02u-%02u %02u:%02u:%02u",rtime.wYear, rtime.wMonth, rtime.wDay, rtime.wHour, rtime.wMinute, rtime.wSecond);

printf("%s\n",str);

}

int main(int argc, char *argv[])

{

printf(argv[1]);

printf("\n");

HANDLE hDir = CreateFile(argv[1], GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

if(hDir == INVALID_HANDLE_VALUE)

{

printf("Get the dictionary failed!\n");

CloseHandle(hDir);

return 0;

}

//定义变量

FILETIME IpCreationTime; //文件夹的创建时间

FILETIME IpLastAccessTime; //对文件夹的最近访问时间

FILETIME IpLastWriteTime; //文件夹的最近修改时间

FILETIME ftime;

SYSTEMTIME ktime;

//获取文件夹的时间属性

if(GetFileTime(hDir, &IpCreationTime, &IpLastAccessTime, &IpLastWriteTime))

{

printf("获取文件夹时间成功,如下:\n");

printf("初始创建时间为:\t");

print(IpCreationTime);

printf("最近访问时间为:\t");

print(IpLastAccessTime);

printf("最近修改时间为:\t");

print(IpLastWriteTime);

}

int temp = 0;

printf("\n是否对文件时间进行修改?(1:修改,2:不修改):");

scanf("%d",&temp);

if(temp == 1)

{

//定义一些变量

char year[15],times[15];

SYSTEMTIME kktime;

FILETIME pptime;

memset(year,0,15);

memset(times,0,15);

printf("请输入要修改为何时间(如-02-18 08:00:46):");

scanf("%s %s",year,times);

sscanf(year, "%d-%d-%d", &kktime.wYear, &kktime.wMonth, &kktime.wDay);

sscanf(times, "%d:%d:%d", &kktime.wHour, &kktime.wMinute, &kktime.wSecond);

kktime.wDayOfWeek = 1;

kktime.wMilliseconds = 0;

SystemTimeToFileTime(&kktime, &pptime);

//下面我将三个时间全部修改了,小伙伴可以根据自己的情况进行修改

BOOL retval = SetFileTime(hDir, &pptime, &pptime, &pptime);

if(retval == TRUE)

{

printf("Success\n");

}

else

{

printf("Failed\n");

}

}

else

{

printf("再见!\n");

}

CloseHandle(hDir);

return 0;

}

c语言 获取文件修改时间 (C语言)获取并修改文件夹时间(创建时间 修改时间 访问时间)...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。