1

我正在尝试以下代码:

os.stat(path_name)[stat.ST_CTIME] = ctime

但是,这会产生以下错误:

exceptions.TypeError: 'posix.stat_result' object does not support item assignment

反正有修改ctime吗?

谢谢!

4

3 回答 3

8

os.utime(filename, timetuple)可用于设置文件的 atime 和 mtime。据我所知,如果不求助于诸如玩时钟或文件系统的直接版本(我真的不推荐)之类的技巧,就无法从用户空间修改 ctime,这对于任何编程语言(Python , Perl, C, C++...):它是操作系统内部的东西,你不想碰它。

例如,参见touch命令文档 (http://www.delorie.com/gnu/docs/fileutils/fileutils_54.html):

尽管 touch 提供了更改文件的两个时间的选项——最后访问和修改时间——,但实际上还有第三个选项:inode 更改时间。这通常被称为文件的 ctime。inode 更改时间表示文件的元信息最后一次更改的时间。一个常见的例子是文件的权限发生变化。更改权限不会访问文件,因此 atime 不会更改,也不会修改文件,因此 mtime 不会更改。然而,关于文件本身的某些东西已经改变,这必须在某处注明。这是 ctime 字段的工作。这是必要的,例如,备份程序可以制作文件的新副本,包括新的权限值。修改文件 ctime 而不影响其他文件的另一个操作是重命名。任何状况之下,在正常操作中,用户不可能将 ctime 字段更改为用户指定的值。

于 2011-04-27T13:22:37.177 回答
2

GNU stroke 实现了更改系统时间的技巧来更改文件的 ctime。如果这就是你想要的,GNU stroke 会为你做:http ://stroke.sourceforge.net/ 。

于 2011-10-11T00:40:29.277 回答
1

没有直接的方法来设置更改时间,只要 inode 信息发生更改,它就会更新,例如所有权、链接计数、模式等。

尝试将模式设置为已设置的模式:

os.chmod(path_name, os.stat(path_name)[stat.ST_MODE])
于 2011-04-27T12:26:47.840 回答