我有两个脚本,一个在Python中,一个在Powershell中,用于获取和比较文件的最后修改。Powershell中的一个使用:
$t = $f.LastWriteTime.ToFileTimeUtc()
这一次对我来说是主要的,我需要在Python中获得相同的信息。{I{I>使用以下公式将时间戳转换为
^{pr2}$但是,我遇到了舍入错误的问题。st_mtime
是一个浮点数,当我将它乘以并转换为long时,我将失去精度——通常误差小于10(即小于1毫秒)。我当然可以修改我的程序,这样它就可以在这个精度内比较数字,但我更希望使用相同的数字。在
这里有一个类似的问题:How do I get *change* file time in Windows?我从中收集到必须访问结构文件_基本信息(http://msdn.microsoft.com/en-us/library/windows/hardware/ff545762(v=vs.85).aspx),但是我不确定如何在不使用IronPython、PyWin或类似的Python扩展的情况下完成它。有没有一种简单的方法(也许使用ctypes
)来访问这些信息?在
*Windows文件时间是一个64位值,表示自公元1601年1月1日午夜12:00(C.E.)协调世界时(UTC)以来经过的100纳秒间隔数。见https://msdn.microsoft.com/en-us/library/system.datetime.tofiletimeutc(v=vs.110).aspx
所以,为了任何有这个问题的人的利益。事实上,我提到的问题How do I get *change* file time in Windows?有点误导,因为它提到了一个模糊的只访问驱动程序的函数},对于大量的文件(在我的例子中大约有一百万个),这是相当昂贵的。所以最后我使用了
ZwQueryInformationFile
,而你可以使用普通的GetFileTime
函数。不管怎样,这些函数都需要文件句柄,而这又需要调用CreateFile
和{GetFileAttributesExW
,它只需要路径。根据我的测量,这仍然比os.stat
慢一点(大约10%),我认为这是由于通过ctypes
调用函数的开销造成的。在所以在从网上复制粘贴后,我把下面的代码放在一起,这正是我想要的。在
相关问题 更多 >
编程相关推荐