3

FileInfo オブジェクトを作成してその lastaccesstime プロパティにアクセスするたびに、常に数分遅れます。ファイル プロパティ ウィンドウは一定のままですが、アプリケーションは通常、プロパティ ウィンドウ時間から数分後に表示されます。

また、ファイルをcmdウィンドウにドラッグしてファイル名を引数として渡すと、ほとんどの場合アクセス時間が更新されますが、常にではありません。

何が原因でしょうか?

以下に例を示します。

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        FileInfo fi = new FileInfo(args[0].ToString());
        Console.WriteLine(args[0]);
        if (fi.Exists)
        {
            Console.Write("Current: " + DateTime.Now + "\n");
            Console.Write("LAT: " + fi.LastAccessTime + "\n");
            Console.Write("LWT: " + fi.LastWriteTime + "\n");
            Console.Write("CT: " + fi.CreationTime + "\n");
        }
        Console.ReadKey();
    }
}

代替テキスト http://img407.imageshack.us/img407/4728/propertiesox6.png 代替テキスト http://img380.imageshack.us/img380/7752/appgt0.png

4

3 に答える 3

4

私の経験では、最終アクセス時間は信頼できないことで有名です。http://technet.microsoft.com/en-us/library/cc781134.aspxによると...

ディスクの最終アクセス時刻は常に最新であるとは限りません。これは、NTFS がディスクへの最終アクセス時刻の更新を強制する前に 1 時間の間隔を探すためです。また、NTFS は、ユーザーまたはプログラムがファイルまたはフォルダーに対して、フォルダーの内容の一覧表示やフォルダー内のファイルの読み取り (変更はしない) などの読み取り専用操作を実行するときに、最終アクセス時刻のディスクへの書き込みを遅らせます。

どうやら、メモリ内のコピーは正しいようですが、私の経験では、キャッシュされた値が古くなっている可能性があります。また、最終アクセス時刻はユーザーがオフにすることができ、Vista および 2008 ではデフォルトでオフになっていることに注意してください。

于 2008-11-02T19:49:11.243 に答える
1

ファイル時間に関する基本的な情報を含む MSDN の記事には、ファイル時間の解決と最終アクセス時間について次のように書かれています。

たとえば、FAT では、作成時間の分解能は 10 ミリ秒、書き込み時間の分解能は 2 秒、アクセス時間の分解能は 1 日 (実際にはアクセス日) です。NTFS は、ファイルの最終アクセス時刻への更新を、最終アクセスから最大 1 時間遅らせます。

これは、FAT と NTFS の両方で、Last Write Time が一般的にあまり正確ではないことを意味しますが、引用されている正確な値が正しいかどうかはわかりません。

于 2008-11-01T01:17:27.400 に答える
0

うーん、おそらくこれは MSDN から:

最初に呼び出されると、FileSystemInfo は Refresh を呼び出し、属性などを取得する API に関するキャッシュされた情報を返します。それ以降の呼び出しでは、情報の最新のコピーを取得するために Refresh を呼び出す必要があります。

しかし、[未来|過去] の LAT は常に数分であることがわかりますか?

于 2008-10-31T18:49:45.997 に答える