【Python、Windows】修改文件/目录的时间(创建/访问/修改)

代码:

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)))生成。关于timedatetime模块的详细用法可以参考本人写的一篇博文:【Python-time模块和datetime模块的部分函数说明】(没错,咱自个儿就是引流之主




参考资料:

  • python 修改文件创建、修改、访问时间:(博客园)https://www.cnblogs.com/suwanbin/p/12037497.html
  • 关于修改目录时间的问题:(CSDN)https://bbs.csdn.net/topics/60511964
  • CreateFile-打开目录需传入标志位FILE_FLAG_BACKUP_SEMANTICS(MSDN)https://learn.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-createfilea#Directories
  • SetFileTime:(MSDN)https://learn.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-setfiletime
  • pywintypes.Time:(pywin32)http://www.markjour.com/docs/pywin32-docs/pywintypes__Time_meth.html

本文发布于CSDN,未经本人同意不得私自转载:https://blog.csdn.net/weixin_44733774/article/details/133609656

你可能感兴趣的:(python,windows,开发语言)