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 ++ ...):これは内部OSのものであり、触れたくありません。

たとえば、touchコマンドのドキュメント(http://www.delorie.com/gnu/docs/fileutils/fileutils_54.html)を参照してください。

touchには、ファイルの2つの時間(最後のアクセスと変更の時間)を変更するためのオプションがありますが、実際には3番目の時間(iノードの変更時間)もあります。これは、ファイルのctimeと呼ばれることがよくあります。iノード変更時間は、ファイルのメタ情報が最後に変更された時間を表します。この一般的な例の1つは、ファイルのアクセス許可が変更された場合です。権限を変更してもファイルにアクセスしないため、atimeは変更されず、ファイルも変更されないため、mtimeは変更されません。それでも、ファイル自体に関する何かが変更されており、これはどこかに注意する必要があります。これはctimeフィールドの仕事です。これは、たとえば、バックアッププログラムが新しいアクセス許可値を含むファイルの新しいコピーを作成できるようにするために必要です。他のファイルに影響を与えずにファイルのctimeを変更する別の操作は、名前の変更です。とにかく、通常の操作では、ユーザーがctimeフィールドをユーザー指定の値に変更することはできません。

于 2011-04-27T13:22:37.177 に答える
2

GNUストロークは、ファイルのctimeを変更するためのchange-system-timeトリックを実装します。それが必要な場合は、GNUストロークが自動的に行います: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 に答える