フォルダ内で変更のあったファイルを特定するには?


DBOX  2003-05-21 10:46:32  No: 3588

API  FindFirstChangeNotification
delphi付属  ShellChangeNotifierコンポーネント
河邦 正さん作  'フォルダの内容を監視するコンポーネント'
クリムさん作  'フォルダ及びファイル変更監視 コンポーネント'
これらでは変更のあったことを監視できても
ファイルを特定することができません。
何か良い方法はありませんでしょうか?


にしの  2003-05-21 21:38:51  No: 3589

なさそうですね。
地道に、フォルダ以下のファイル・フォルダのサイズおよび日付を保存しておき、変更がかかったらチェックして探すしか・・・。


DBOX  2003-05-27 09:46:40  No: 3590

上記の河邦 正さん作コンポーネントのChangeイベント
procedure TForm1.DirMonitor1Change(Sender: TObject);
var
    SR: TSearchRec;
    Res: Integer;
    ListItem: TListItem;
    DT: TDateTime;    //更新時刻
    Year, Month, Day,
    Year2, Month2, Day2: Word;
begin
    ListView1.Clear;
    DecodeDate(Now, Year, Month, Day); //日付分解
    Res := FindFirst(GetCurrentDir+'\*.*', faAnyFile, SR);
    While Res = 0 do
      begin
          //対象がディレクトリのとき次へ
          if SR.Attr = $00000010 then
              begin
              Res := FindNext(SR);
              Continue;
              end;

          With ListView1.Items do
          begin
              DT := FileDateToDateTime(SR.Time);   //更新時刻取得
              DecodeDate(DT, Year2, Month2, Day2);
              if Day = Day2 then
                  begin
                  ListItem := Add;
                  ListItem.Caption := SR.Name;
                  ListItem.SubItems.Add( DateToStr(DT)  );
                  end;
              //それ以外はスルー

          end;
          Res := FindNext(SR);
      end;
    FindClose(SR);
end;
いまこんな感じです。
TSearchRec型の
FindData: TWin32FindData;
が使えればもっとよくできそうです。
勉強してきます。


DBOX  2003-06-21 09:35:14  No: 3591

こんなツールがあるそうです。
http://www.vector.co.jp/soft/win95/util/se108867.html


XOOX  2003-06-30 07:48:04  No: 3592

特定の時期との比較にはサイズと日付を見るのが有効ですが
参考のため圧縮などの場合はCRC32値をとっておいて保存し比較して
データの破損のチェックをします。

しかし今回の場合はリアルタイムでチェックしているということなので
何もバックアップを取らなくても
変更イベント通知があったときにそのときのファイルの日付をスキャンして
10秒以内とか1分以内であれば
そのファイルが変更されたと考えてよいと思います。
つまりデータベース化されたファイルリストならば
時間で抽出すればよいということです。


とほりすかり  2003-07-20 04:00:50  No: 3593

FIMO等では制限がいろいろあるので自分でおなじことをやろうとしています。
ReadDirectoryChanges APIが使えそうなので調査しています。
ただし、HelpにはNew - Windows NTと書いてあります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加