更新する必要がある作成時間偽のファイルを削除して再作成することで、偽のファイルの時刻を「現在」に変更できます。奇妙なことに、新しく作成されたファイルは、元のファイルの作成時刻を継承しているように見えます。
例を挙げてみましょう:
> touch a.txt //create a new file
> dir /T:C //creation time
02/27/2013 02:04 PM 0 a.txt
> dir /T:W //modification time
02/27/2013 02:04 PM 0 a.txt
//wait a bit...
> touch a.txt //update modified-time
> dir /T:C
02/27/2013 02:04 PM 0 a.txt
> dir /T:W //mod-time changed, as expected
02/27/2013 02:05 PM 0 a.txt
> del a.txt
> touch a.txt //recreate file
> dir /T:C //same original ctime !!
02/27/2013 02:04 PM 0 a.txt
> dir /T:W //the actual time the 2nd file was created
02/27/2013 02:06 PM 0 a.txt
> del a.txt
> touch b.txt //ok, create a file with a different name
> dir /T:C //ctime as expected
02/27/2013 02:07 PM 0 b.txt
> mv b.txt a.txt
> dir /T:C //again, ctime of original file!
02/27/2013 02:04 PM 0 a.txt
> del a.txt
> touch c.txt //create a file with a different name, again
> dir /T:C //ctime as expected
02/27/2013 02:08 PM 0 c.txt
> cp c.txt a.txt //this time copy it...
> dir /T:C //ctime of a.txt is that of original file!
02/27/2013 02:04 PM 0 a.txt
02/27/2013 02:08 PM 0 c.txt
//wait longer...
> del *
> touch d.txt
> dir /T:C
02/27/2013 02:22 PM 0 d.txt
> cp d.txt a.txt
> dir /T:C //lo and behold, the ctime has changed.
02/27/2013 02:22 PM 0 a.txt
02/27/2013 02:22 PM 0 d.txt
これで私のデモンストレーションは終わりです。2つの疑問が生じます。
^^^ 彼が言ったこと。
どうすれば修正できますか?
さて、これについて詳しく説明しましょう:
Windows OS / NTFS の内部メカニズムがどうなっているか知っている人はいませんか? 何らかのファイル メタデータのキャッシュが行われ、キャッシュの無効化が時間制限されているようです。
最新の状態で、オリジナルと同じ名前の新しいファイルを取得する方法について何か提案はありますか
ctime
? バッチ スクリプト、レジストリ ハック、プログラムなど、どのような提案でも歓迎します。
答え1
回答:
- このプロセスは「ファイル システム トンネリング」と呼ばれ (量子力学から派生)、私の理解する限りでは、もともと Windows 95 用に設計されたものです。プログラムがファイルを保存して上書きするだけの状況に対処するには、オペレーティング システムが必要です。その場合、ユーザーは通常、作成日 (および短いファイル名) が変更されないことを予想しますが、トンネリングがなければ、作成日は最後の保存時刻を反映します。参照:Windowsのファイル時間に関する注意事項、ファイルシステムトンネリングの伝説
- この問題を解決するには 2 つの方法があります。
- 保存/作成後の作成時間を即時に変更する
- レジストリ設定による(オペレーティング システム全体):
ファイル トンネリング設定は、Windows レジストリ キー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem によって制御されます。
トンネリング キャッシュ時間を長くするには、DWORD 値 MaximumTunnelEntryAgeInSeconds を変更または追加します。デフォルトのキャッシュ時間は 15 秒です。トンネリングを無効にするには、DWORD 値 MaximumTunnelEntries を変更または追加し、0 に設定します。
答え2
私は Windows を使用していませんが、回避策を見つけたと思います。
Win32ではどうやらファイル作成時間の変更、を使用してファイル時間の設定関数。
Win32でアプリを書いていない場合は、PowerShellを使用できるはずです。同様のstackoverflowの回答:
C:\> powershell (ls your-file-name-here).CreationTime = Get-Date
答え3
ctimeではなくatimeを使用してください。アクセス時間はアクセス時に更新されないため、実質的には作成時間です。もう