我正在尝试以下代码:
os.stat(path_name)[stat.ST_CTIME] = ctime
但是,这会产生以下错误:
exceptions.TypeError: 'posix.stat_result' object does not support item assignment
反正有修改ctime吗?
谢谢!
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 字段更改为用户指定的值。
GNU stroke 实现了更改系统时间的技巧来更改文件的 ctime。如果这就是你想要的,GNU stroke 会为你做:http ://stroke.sourceforge.net/ 。
没有直接的方法来设置更改时间,只要 inode 信息发生更改,它就会更新,例如所有权、链接计数、模式等。
尝试将模式设置为已设置的模式:
os.chmod(path_name, os.stat(path_name)[stat.ST_MODE])