【问题标题】:Move locked file移动锁定的文件
【发布时间】:2012-04-24 14:54:19
【问题描述】:

我正在尝试移动 (File.Move) 锁定的 .dll 文件以执行应用程序更新。 File.Move 方法无异常执行。但是文件没有移动。我的意思是在执行 File.Move 方法后,我有同一个文件的两个副本:在目标文件夹和源文件夹中。这是代码:)

File.Move(fileName, newFileName);

有人能解释一下这是什么原因吗?

【问题讨论】:

  • 如果文件正在使用中,您无法删除它(操作系统会阻止此操作)...您是否期​​待不同的行为?
  • 已编辑。操作系统可以移动锁定的文件

标签: c#


【解决方案1】:

File.Move 跨卷依次执行两个操作:

  1. 文件复制
  2. 文件删除

似乎第一个成功而第二个默默地失败了。结果符合预期。

请注意:http://msdn.microsoft.com/en-us/library/system.io.file.move.aspx

如果您尝试跨磁盘卷移动文件并且该文件正在使用中,则该文件将复制到目标位置但不会从源中删除。

【讨论】:

  • 要回答的一些话:File.Move 仅在我们尝试跨卷移动文件时执行复制和删除。 Else File.Move 只是更新文件元数据(因为可以移动锁定的文件)。
  • 这是跨卷移动的吗?会解释这一切。
【解决方案2】:

通常在这种情况下,您要么有一个不需要任何应用程序 DLL 的单独更新过程,因此您可以生成更新程序,它可以移动它喜欢的所有内容、执行更新并重新启动应用程序。

或者,像安装程序一样,您将文件更改提交到下次重新启动时发生。

【讨论】:

    【解决方案3】:

    File.Move 方法首先将文件fileName 复制到文件'newFileName'。一旦第一步成功,它将删除文件'fileName'。

    现在如果文件“fileName”已经打开/锁定,它将无法删除该文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2013-02-13
      • 2014-03-17
      相关资源
      最近更新 更多