【问题标题】:File.ReadAllBytes keeps file handle openFile.ReadAllBytes 保持文件句柄打开
【发布时间】: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 查看加载的模块列表。
  • 可能是其他原因使文件保持打开状态。如果不是您的代码,则可能是防病毒软件,特别是如果它是您刚刚创建的文件。

标签: c# file-io


【解决方案1】:

ReadAllBytes 应该作为其功能的一部分关闭文件。听起来有些东西阻止它关闭,因此您无法删除。也许发生了需要捕获的异常。

这里有一个类似的问题,它的解决方案可能会有所帮助: Unable to delete some files via System.IO.File in C# console app

【讨论】:

  • 整个函数都包裹在一个泛型的try/catch中,没有异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多