在Python中使用os.stat()时,我可以假设st_ctime总是小于或等于st_mtime吗?若否,原因为何?
代码将始终在Linux上运行,但如果OSes之间有区别,那将是一件很好的事情。
发布于 2011-01-03 14:46:50
在某些情况下,此假设可能被证明是无效的(并且在很大程度上取决于操作系统的实现):
这两者都是可重现的:您最好的选择是采用您计划针对的各种操作系统,并对此行为进行测试。我所能提供的只是猜测。
也是,st_ctime不一定是“创建时间”,而是“上次状态改变”(source)的时间。utime标记要更新的文件的ctime (source),它的"utimbuf“类型的参数没有ctime的成员。因此,在操作系统和文件系统允许的情况下,ctime在技术上可以超过mtime。os.stat文档实际上提到了这一点:
与
平台相关;在Unix上最近更改元数据的时间,或在Windows上创建元数据的时间
虽然Python隐藏了很多C方面的东西,但os.stat和朋友都是基于相同的C系统调用构建的,所以它们的规范是寻找更多信息的好地方。
发布于 2011-01-03 19:42:00
请定义“小于”,你的意思是新的还是旧的?您不能假设ctime发生在mtime之前,但通常情况下,ctime与mtime相同,或者在mtime之后。
unix上的ctime不是“创建时间”,而是“更改时间”。mtime在文件内容更改时更新,但ctime在文件元数据更改时更新(这意味着它也会在mtime更新时更新),所以ctime在mtime之后是非常正常的。下面是一个例子:
user@ubuntu:~$ touch test
user@ubuntu:~$ chmod 600 test
user@ubuntu:~$ stat test
File: «test»
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 700h/1792d Inode: 222375 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-01-03 12:35:15.945973569 +0100
Modify: 2011-01-03 12:35:15.945973569 +0100
Change: 2011-01-03 12:35:24.024998291 +0100此外,我相信在Windows上,ctime字段实际上表示“创建时间”,这是Windows和Unix之间的操作系统差异。我在网上读到了一些关于这方面的东西,但我会让你自己做这方面的研究。
发布于 2011-01-03 14:44:10
完全可以通过编程方式设置这两个值。通过将时钟设置回创建文件之前,您也可以“自然”地执行此操作。
换句话说,是的。这将是不寻常的,但完全有可能。
https://stackoverflow.com/questions/4582511
复制相似问题