作成日より前の修正日を持つファイルを持つことは可能ですか?このイベントが発生する原因となるアクションは何ですか?
抽出された.tarアーカイブを検討してください。通常、抽出されたファイルには、アーカイブコンテンツから割り当てられた最終変更タイムスタンプが含まれます(タイムトラベラーでない限り、これは通常、過去のものです)。ファイルシステムに関する限り、これらのファイルは作成されたばかりです。
既存のファイルの変更時間を変更するユーティリティも存在します。たとえば、Linuxでは touch コマンドです。
Windowsでは、ファイルの作成時刻と変更時刻を簡単に設定(必要に応じて改ざん)できます。コンピュータの時計を変更する必要はありません。ローカル管理者のアクセスも必要ありません。必要なのは、問題のファイルへの書き込みアクセスだけです。
SetCreationTime
を使用してPowerShellでファイルの作成時間を設定するには:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
SetLastWriteTime
を使用して最終変更時刻を設定するには:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
Linuxでは、 this Ask Ubuntu answer に示すように、touch
の-d
フラグを使用してファイルの最終変更時刻を簡単に変更できます。 Linuxファイルシステムでのファイルの作成日という概念は実際にはありません( nixおよびLinuxでさらに読む )。
ファイルを最初から作成すると、作成時刻は「今」、変更日は「今」になります。このファイルを別のドライブにコピーするとします。 Windowsは変更時刻を保持しますが、そのファイルの作成時刻は、ファイルをそのドライブにコピーした時刻(つまり、ファイルがthatドライブに作成された時刻)に設定されます。そのような単純な。
それは実際に正しいです:
はい。 Windowsでは、ファイルを変更して保存します。ファイルをコピーします。コピーのプロパティを見ると、以前に変更された日付があることがわかります。
ここで注意すべき最も重要なことは、ファイルの変更時間は実際には特別ではなく、他のデータと同じように保存されるということです。データが実際にいつ最後に書き込まれたか、またはいつ読み取られたかを知る方法はありません。
ここから、いつでも(CDのようなライトワンスメディアを除いて)、最終変更時刻または作成時刻を格納するドライブのビットを直接変更することが常に可能であることがわかります。
より実際的には、他の回答が指摘しているように、これは一般的なオペレーティングシステム内からも実行できます。 Windowsでは、これはWinAPI SetFileTime
関数によって提供され、Linuxでは utime
を使用してこれを実行できます。 touch
などのツールは、これらのAPIの上に構築されます。
これらのAPIの最も一般的な正当な用途は、変更時間を維持することです。ファイルのコピー時、アーカイブからの抽出時など。
私の経験では、1台以上のコンピューターがファイルの変更に使用され、そのうちの1台のシステム時刻が間違っている場合です。システム時刻が間違っている最も一般的な3つの原因は、順不同です。