7

2つのフォルダ内のファイルを比較するプログラムがあります。ファイルの名前が変更されたかどうかを検出し、最新のファイル(最近名前が変更されたファイル)を特定し、古いファイルの名前を一致するように更新したいと思います。

これを実現するには、最新のファイルが古いファイルと少しずつ同一であるかどうかを確認し、同一である場合は、古いファイルの名前を新しいファイルと一致するように変更します。

問題は、どのファイルの名前が最近変更されたかを教えてくれるものが何もないということです。

FileInfo.LastModifiedのようなプロパティが欲しいのですが、名前が変更されたファイルの場合です。

私はすでにFileSystemWatcherのようなソリューションを見てきましたが、それは私が探しているものではありません。フォルダーの状態を追跡する専用のプロセスを気にすることなく、いつでもシンクロナイザーを実行できるようにしたいと思います。

何か案は?

4

5 に答える 5

1

NTFSドライブで実行している場合は、変更ジャーナルを有効にして、名前変更イベントなどを照会できます。ただし、最初に有効にするには管理者である必要があり、ディスク領域を使用します。残念ながら、ジャーナルを読むための特定のC#実装については知りません。

于 2010-02-22T23:13:27.213 に答える
1

A:少なくともNTFSでは、代替データストリームをファイルに添付できます。最初の同期では、 ADSのGUIDをソースファイルに添付してタグを付けることができます。

B:ソースへの書き込みアクセス権がない場合は、同期したファイルのハッシュをターゲットリポジトリに保存します。ソースが変更された場合、ソースファイルをハッシュし、ハッシュが衝突した場合にのみビットごとに比較する必要があります。ハッシュ関数の品質と速度によっては、これにより多くの時間を節約できます。

于 2010-02-22T23:35:41.017 に答える
0

2つのディレクトリ内の(すべて?)ファイルのCRC(たとえば、CRCの例)を作成し、CRC値、ファイル名などを使用して最終更新時刻を保存します。その後、リストを調べてCRCでマッチを見つけ、次を使用します。何をすべきかを決定するための日付値。

于 2010-02-22T23:54:10.783 に答える
0

フォルダー内の予想されるすべての名前のリストを保持する構成ファイルを作成し、フォルダー内のファイルが予想される名前のリストのメンバーでない場合は、ファイルの名前が変更されていることを確認できます。ただし、フォルダに新しいファイルを追加するたびにリストを変更する必要があることを考えると、これにより別の作業レイヤーが追加されます。

于 2010-02-22T22:47:33.467 に答える
0

通常、ファイルシステムはこれを追跡しません。

Windowsを使用しているように見えるので、GetFileInformationByHandle()を使用できます。(申し訳ありませんが、C#に相当するものはわかりません。)返された構造体の「ファイルインデックス」フィールドを使用して、ファイルが以前に見たものと同じインデックスを持っているかどうかを確認できます。ハードリンクにも同じインデックスがあることに注意してください。

または、ファイルの内容を何らかの方法でハッシュすることもできます。

あなたが何をしようとしているのか正確にはわからないので、これらの点のどちらかが理にかなっているのかどうかはわかりません。最も合理的な答えは、「いいえ、それはできません」である可能性があります。

于 2010-02-22T23:03:35.157 に答える