【プログラミング】ファイルの更新日時を比較する(2)

無用なファイルのコピーを防ぐために、ファイルの更新日時を取得して比較するということをプログラムから行ってみる、2回目です。

【プログラミング】ファイルの更新日時を比較する(1)

なぜ、同じはずのファイルのコピーが行われてしまうのだろうという疑問を解決するために、2つのファイルの更新日時を取得するということをプログラムから行ってみました。

Visual C#でそういうプログラムをさくっと書いてみました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;

namespace checkfiletime_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            string targetfile = "\\MailBox\\Account0\\junk.idx";
            string filename1 = "C:\\Users\\user\\AppData\\Roaming\\Justsystem\\Shuriken\\user"+targetfile;
            string filename2 = "Z:\\Backup\\Shuriken"+targetfile;
            DateTime filetime1 = File.GetLastWriteTime(filename1);
            DateTime filetime2 = File.GetLastWriteTime(filename2);
            Console.WriteLine("File1: {0:F}", filetime1);
            Console.WriteLine("File2: {0:F}", filetime2);
        }
    }
}

コンソールベースのプログラムです。2つのファイルの更新日時をGetLastWriteTimeメソッドで取得して表示するだけの簡単なプログラムです。Cドライブにあるファイルはローカルのファイル、Zドライブにあるファイルが、Parallels Desktop越しに見えるMac側のファイルです。

調査対象のファイルは、やや古いファイルで、最新の更新を受けないようなファイルをあえて選んであります。

さっそく実行してみました。

Getfiletime_01

同じですねぇ。これなら、毎回毎回コピーされるわけ、ないのですがね。

実は、NTFSにおいてはファイルの更新日時は、秒より細かな単位で記録されています。ですから、秒までの情報で比較しても意味がないわけです。

一応、.NET FrameworkのAPIの範囲ではこのへんが限界(調べたけどわかりませんでした)なので、Windows APIを直接叩いてみたらどうかと思いました。で、次回はVisual C++でWindows APIを叩いてみようと思います。

コメント