gpt4 book ai didi

python - 如何在 Windows 中获取 *更改* 文件时间?

转载 作者:太空狗 更新时间:2023-10-30 03:00:54 32 4
gpt4 key购买 nike

我正在尝试使用 FreeNAS CIFS 与 Windows 共享(同步文件 Windows FreeNAS)并遇到 robocopy.exe 认为某些文件需要同步的问题每次运行 robocopy.exe (/COPY:DAT) 时都会再次复制。

我最喜欢的文件管理工具Far Manager告诉我“更改时间”不一样:

Windows 上的文件时间: On Windows

FreeNAS (ZFS) 支持的 CIFS 共享上的文件时间: On CIFS share backed by FreeNAS (ZFS)

我对“更改时间”丢失这一事实非常满意,我很乐意在 Windows 驱动器上重置更改时间,但我找不到如何以编程方式执行此操作。

Python 的 os.stat(filename) 返回 st_atime、st_mtime 和 st_ctime,而且,我测试过,这个元组在 Windows 和 FreeNAS 之间具有相等的值。大概不存在“更改时间”。

Windows API 也只给出 3 个数字(创建、上次访问和上次写入)但没有“更改时间”: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724320(v=vs.85).aspx

显然,robocopy.exe 和 Far Manager 都以某种方式从系统中获取了 4 个值。我真的很想避免拆卸它们,希望能在这里得到答案。如何获取和设置“更改时间”?

任何解决方案都可以(Python、C++、WinAPI、可以操纵它的外部命令行工具等)。

最佳答案

好的,我似乎已经弄清楚了,感谢 cocarin 指向远源。Far 使用 NtQueryInformationFile 获取时间,使用 NtSetInformationFile 设置时间,FILE_BASIC_INFORMATION 结构包含所有 4 个时间,包括更改时间。

查询信息文件文档:http://msdn.microsoft.com/en-us/library/windows/hardware/ff567052(v=vs.85).aspx (ZwQueryInformationFile)

SetInformationFile 文档:http://msdn.microsoft.com/en-us/library/windows/hardware/ff567096(v=vs.85).aspx (ZwSetInformationFile)

FILE_BASIC_INFORMATION 文档:http://msdn.microsoft.com/en-us/library/windows/hardware/ff545762(v=vs.85).aspx

typedef struct _FILE_BASIC_INFORMATION {
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime; // <--- win!
ULONG FileAttributes;
} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;

不确定是否有适合 Python 的包装器,但这已经足够了,我可以编写自己的包装器。

关于python - 如何在 Windows 中获取 *更改* 文件时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27534448/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com