1

ソースと宛先のディレクトリとそのサブディレクトリのすべてのファイルを再帰的に処理し、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ドライブへの参照を保持する、メモリ管理に関して見落としているものはありますか?

4

3 に答える 3

0

プログラムを閉じた可能性がありますが、プロセスが本当に終了したことを確認してください。タスク マネージャーを使用してプロセスを見つけ、それを閉じてから、タスク マネージャーでチェックして、それが本当になくなっていることを確認します。

于 2009-08-16T16:18:13.073 に答える
0

無料のUnlockerユーティリティを使用して、ファイル オブジェクトに存在するロックを列挙できます。または、 Sysinternals の HANDLE.EXEを使用して、実行中のすべてのプロセスのすべてのハンドルを一覧表示することもできます。

于 2009-08-16T16:24:35.680 に答える
0

理由はわかりませんが、usbからプログラムを起動すると、usbデバイスがロックされることはほぼ確実です。ローカル ドライブのプログラムを実行し始めてから、ロックが発生しなくなりました。多分デバッグ版だから?わからない。

于 2009-08-24T20:08:02.200 に答える