from win32file import CreateFile, SetFileTime, GetFileTime, CloseHandle,CreateDirectory
from win32file import GENERIC_READ, GENERIC_WRITE, OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS
from pywintypes import Time
import time
import os
def AlterFileFolderTime(path,createTime,modifyTime,accessTime):#修改文件/目录时间。传入的为时间戳
try:
if(os.path.isfile(path)):
fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE, 0, None, OPEN_EXISTING, 0, 0)
elif (os.path.isdir(path)):
fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE, 0, None, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS , 0)
else:
return False
SetFileTime(fh, Time(createTime), Time(accessTime) ,Time(modifyTime))
CloseHandle(fh)
return True
except Exception as e:
raise e
if __name__ == '__main__':
import datetime
cTime=datetime.datetime(2020,1,1,0,0,0).timestamp()#创建
mTime=datetime.datetime(2021,1,1,0,0,0).timestamp()#修改
aTime=datetime.datetime(2022,1,1,0,0,0).timestamp()#访问
path='./Folder'
# path='./Folder/File.txt'
try:
r = AlterFileFolderTime(path, cTime, mTime, aTime)
rst='成功' if r else '失败:路径不存在'
except Exception as e:
rst='异常:'+e
print(f'路径[{path}]的时间修改【{rst}】')
改文件的容易,改目录的让我一顿好找。
首先我找到一份不错的代码【(博客园)python 修改文件创建、修改、访问时间】,但这份代码只能修改文件的,目录仍然是没法处理。
然后几经搜索,在一个CSDN帖子【(CSDN)请教各位,如果修改目录的创建时间、修改时间??】中我看到了一位老哥神仙指路:CreateFile+SetFileTime,记住,CreateFile也可以打开目录。
随即我跑去看官方文档【(MSDN)CreateFile-Directory】,也证实了那位老哥说的话,而且在CreateFile
中仅需传入额外的标志位FILE_FLAG_BACKUP_SEMANTICS
即可打开目录。在经过测试也的确能够使用CreateFile
打开目录并用SetFileTime
对其设置时间。
时间戳可以通过datetime.datetime(y,m,d,H,M,S).timestamp()
或者time.mktime(time.struct_time((y,m,d,H,M,S,0,0,0)))
生成。关于time
和datetime
模块的详细用法可以参考本人写的一篇博文:【Python-time模块和datetime模块的部分函数说明】(没错,咱自个儿就是引流之主
CreateFile
-打开目录需传入标志位FILE_FLAG_BACKUP_SEMANTICS
(MSDN)https://learn.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-createfilea#DirectoriesSetFileTime
:(MSDN)https://learn.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-setfiletimepywintypes.Time
:(pywin32)http://www.markjour.com/docs/pywin32-docs/pywintypes__Time_meth.html本文发布于CSDN,未经本人同意不得私自转载:https://blog.csdn.net/weixin_44733774/article/details/133609656