python - 在 Windows 中使用 python 更改目录创建时间 (ctime)

标签 python pywin32 pywin

我正在尝试使用 python 更改 Windows 系统的目录创建时间戳。我有一个从另一个驱动器复制过来的目录,目录创建时间没有保留。这是我希望做的,

第 1 步:使用以下代码读取源目录列表及其创建时间,

import os
source_dir_path = r'd:\data'
list_of_directories = os.listdir(source_dir_path)
creation_times = {}
for d in list_of_directories:
    creation_times[d] = os.path.getctime(os.path.join(source_dir_path, d))

第 2 步:遍历目录列表并设置目录创建时间。为此,我依赖 Python For Windows Extensions。代码如下所示,

from win32file import CreateFile, SetFileTime, GetFileTime, CloseHandle
from win32file import GENERIC_READ, GENERIC_WRITE, OPEN_EXISTING
from pywintypes import Time

destination_dir_path = r'f:\data'
#list_of_directories = os.listdir(source_dir_path)
for d in creation_times:
    fh = CreateFile(os.path.join(destination_dir_path,d), 0, 0, None, OPEN_EXISTING, 0,0)
    SetFileTime(fh, creation_times[d]) 

我在 CreateFile 行收到“访问被拒绝”。我不确定这是否是设置目录创建时间的有效方法。这是设置目录创建时间的正确方法吗

最佳答案

以下方法应该可行,尽管这确实也为最后访问和最后写入时间设置了创建时间。它创建文件名和创建时间的元组列表(而不是字典),将文件从源目录复制到目标目录。您的代码存在的主要问题是 CreateFile 调用所需的参数:

from win32file import CreateFile, SetFileTime, GetFileTime, CloseHandle
from win32file import GENERIC_WRITE, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, FILE_SHARE_WRITE

import os
import shutil

source_dir_path = r"c:\my_source"
destination_dir_path = r"c:\my_target"

creation_times = [(d, os.path.getctime(os.path.join(source_dir_path, d))) for d in os.listdir(source_dir_path)]

for filename, ctime in creation_times:
    src = os.path.join(source_dir_path, filename)
    target = os.path.join(destination_dir_path, filename)
    shutil.copy(src, target)

    fh = CreateFile(target, GENERIC_WRITE, FILE_SHARE_WRITE, None, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
    SetFileTime(fh, ctime, ctime, ctime)    
    CloseHandle(fh)

关于python - 在 Windows 中使用 python 更改目录创建时间 (ctime),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35124404/

相关文章:

python - 为什么我找不到任何 pywin32 文档/资源

python - 将整个文件作为一个字符串导入

Python3从PID获取进程基地址

Python:使用 win32com 打开 excel 工作簿时出错

python - 运行python脚本安装Windows服务时没有响应

作为 Windows 服务的 Python Flask

python - 获取每个窗口的 HWND?

python - 使用 Bottle 捕获 mako 运行时错误

python - 如何使 tkinter 输入字段强制输入一些文本?