1

我在 .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 驱动器的引用?

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 回答