ソースと宛先のディレクトリとそのサブディレクトリのすべてのファイルを再帰的に処理し、lastwritetime を比較し、比較結果に基づいて宛先ディレクトリとの間でファイルをコピー/削除するプログラムを .NET で作成しました。
例えば。宛先ディレクトリはリムーバブル ドライブ (usb) 上のディレクトリです。プログラムを閉じた後でも、PC から USB ドライブを削除できません。USB を開いている他のプログラム (エクスプローラーなど) はなく、そのプログラムはタスク リストに表示されなくなります。
このプログラムは、次を使用して各ディレクトリとサブディレクトリの DirectoryInfo を取得することで機能します。
DirectoryInfo dir = new DirectoryInfo(path);
GetFiles を使用してすべてのファイルを取得します。
var files =dir.GetFiles();
次に、foreach がすべてのファイルをループして、一部のファイルを除外するかどうかを確認します (RegEx を使用して複数のパターンが必要なため、手動で行います)。
正規表現フィルターに基づいて除外されていないファイルは、SortedList に追加されます。1 つはソース ディレクトリ用、もう 1 つは宛先ディレクトリ用です。
これは比較機能で使用されます。using パターンを使用して、ソース リストの列挙子と宛先リストの列挙子を作成します。
using (var srcEnum = _srcFileInfos.GetEnumerator())
{
using (var dstEnum = _dstFileInfos.GetEnumerator())
{
... // compare code
}
}
最後に、ファイルは次を使用してコピーまたは削除されます
File.Copy
File.Delete
プログラムを閉じた後でもUSBドライブへの参照を保持する、メモリ管理に関して見落としているものはありますか?