1

ファイル転送アプリケーションを作成していて、ファイルを NTFS から FAT ドライブにコピーする必要があります。http://support.microsoft.com/kb/127830から読むと、 #11/29/2004 7:31:06 PM, 250ms# などの時刻は #11/29/2004 7 に変換される必要があることを理解しています。午後 31 時 8 分、0 ミリ秒 # FAT ハード ドライブにコピーする場合。ただし、実際には、ファイル時間が #11/29/2004 7:31:06 PM, 0ms# に切り捨てられます。

ここで何か不足していますか?時間はいつ切り捨てられ、いつ丸められますか?

編集: コード サンプルを追加します。

IO.File.GetLastWriteTimeUtc(Source)

私のNTFS-> FAT機能は次のとおりです。

Function NTFSToFATTime(ByVal NTFSTime As Date) As Date
    Return (New Date(NTFSTime.Year, NTFSTime.Month, NTFSTime.Day, NTFSTime.Hour, NTFSTime.Minute, NTFSTime.Second).AddSeconds(If(NTFSTime.Millisecond = 0, NTFSTime.Second Mod 2, 2 - (NTFSTime.Second Mod 2))))
End Function
4

2 に答える 2

3

技術背景: 基本的に、FAT は 2 バイトを使用して、ディレクトリ エントリに作成されたファイルの時間 (時間/分/秒) を格納します。このフィールドの下位 4 ビットを秒に使用します。0 ~ 29 の値が有効で、2 を掛けて最終値を取得します。したがって、必然的に、秒は偶数になります。

奇妙ですが、私の推測では、ドキュメントが間違っているか、使用している API を参照していません。タイムスタンプが切り捨てられています。FAT ファイルの作成に使用している API がわからない (ドキュメントを参照すると役立つ場合があります)。

于 2010-02-11T20:30:24.563 に答える
2

実際、この問題は、ファイル時間を間違った方法 (d-link ストレージ ベイ) で処理するハード ドライブ インターフェイスに関連していました。丸めではなく切り捨て。

したがって、この問題を回避する真の方法はありませんが、時間のチェックが少しずさんであることを許容する必要があります。

于 2010-02-20T13:13:24.463 に答える