【发布时间】:2015-10-20 17:57:18
【问题描述】:
我有这段代码,它将文件加载到 RAM 中,然后将其作为程序集加载到 AppDomain (d):
var a = d.Load(File.ReadAllBytes(tmp));
问题是,当我稍后尝试删除位于tmp 的文件时(现在只使用文件资源管理器),我收到一条错误消息,指出该文件仍在我的程序中打开。我什至尝试将using 关键字与File.Open 一起使用,但这似乎也不起作用。有人能解释一下为什么会发生这种情况,以及如何解决吗?
【问题讨论】:
-
File.ReadAllBytes不保留文件的打开流。也许它在您的代码中的其他地方? -
您在另一个位置打开文件。该语句是正确的,它使用了在返回字节数组时已经释放的 FilesStream。如何创建临时文件?
-
@Alois 我用过
Path.GetTempFilePath() -
您是否已将此程序集加载到另一个 AppDomain 中?如果您的文件显示为加载的程序集,请使用 Visual Studio 查看加载的模块列表。
-
可能是其他原因使文件保持打开状态。如果不是您的代码,则可能是防病毒软件,特别是如果它是您刚刚创建的文件。