我在 .NET 中编写了一个程序,它递归遍历源目录和目标目录及其子目录的所有文件,比较 lastwritetime 并根据比较结果将文件复制到目标目录/从目标目录复制/删除文件。
当例如。目标目录是可移动驱动器(usb)上的目录,即使程序关闭,我也无法从我的电脑中删除 USB 驱动器。没有其他打开 USB 的程序(例如资源管理器)并且该程序不再出现在任务列表中。
该程序通过使用获取每个目录和子目录的 DirectoryInfo 来工作
DirectoryInfo dir = new DirectoryInfo(path);
我使用 GetFiles 来获取所有文件:
var files =dir.GetFiles();
然后 foreach 循环遍历所有文件以检查是否过滤掉了一些文件(手动完成,因为我想要使用 RegEx 的多个模式)。
未根据正则表达式过滤器排除的文件将添加到 SortedList,一个用于源目录,一个用于目标目录。
这是由比较功能使用的。它使用 using 模式为源列表和目标列表创建一个枚举器:
using (var srcEnum = _srcFileInfos.GetEnumerator())
{
using (var dstEnum = _dstFileInfos.GetEnumerator())
{
... // compare code
}
}
最后,使用复制或删除文件
File.Copy
File.Delete
在内存管理方面有什么我忽略的东西,即使在我关闭程序后也会保留对 USB 驱动器的引用?