C# 使用时强制重命名文件夹

C# 使用时强制重命名文件夹,c#,C#,我有一个在Web服务器上运行的服务,它等待一个zip文件被放到一个文件夹中,提取它,然后将它移动到某个目录。由于我们想替换有问题的目录,它会重命名现有文件夹(非常大的文件夹,删除需要几分钟),然后将提取的文件移到原来的位置,然后删除旧文件夹。问题是:当它尝试重命名现有文件夹时,它会获得“对路径“”的访问被拒绝”,我认为这是因为该文件夹一直被Web服务使用。有没有一种方法可以强制重命名文件夹,或者控制并等待它不被使用?或者有其他方法可以实现这个目标吗?当任何进程都持有文件夹的底层操作系统句柄时,您

我有一个在Web服务器上运行的服务,它等待一个zip文件被放到一个文件夹中,提取它,然后将它移动到某个目录。由于我们想替换有问题的目录,它会重命名现有文件夹(非常大的文件夹,删除需要几分钟),然后将提取的文件移到原来的位置,然后删除旧文件夹。问题是:当它尝试重命名现有文件夹时,它会获得“对路径“”的访问被拒绝”,我认为这是因为该文件夹一直被Web服务使用。有没有一种方法可以强制重命名文件夹,或者控制并等待它不被使用?或者有其他方法可以实现这个目标吗?

当任何进程都持有文件夹的底层操作系统句柄时,您不能“强制”重命名(如果您能够做到这一点,那将非常糟糕)

你可以:

  • 为webservice实现暂停/恢复功能,以便可以告诉它暂停工作并释放句柄,然后在完成后继续。 或
  • 完全停止Web服务,完成您的工作,然后启动Web服务

如果文件夹或文件夹中的任何文件正在使用,我不这么认为。您可以在重命名文件夹时通过编程暂停服务,然后在文件夹完成后重新启动它??您需要确保锁定它的是您的服务。锁定它的是Web服务。然后尝试暂停/停止服务可能?显然不是我想听到的,但这似乎是唯一的解决方案。因此,我们最终放弃了它,并希望每周在非群集上部署一次,以获取这些数据。@KyleW,您能够修改不断使用该文件夹的服务吗?在切换到新提取的文件夹之前,是否必须重命名/删除它正在使用的文件夹?您可以通过公开公共属性(如
FolderName
)来绕过它,并将其设置为新文件夹,这样它将切换到使用新文件夹,然后删除旧文件夹。这只是一个建议,因为我没有完整的信息和要求,但你可能放弃得太快了,也许那是回到白板并进行不同设计的好时机。我的回答有点晚,但我们提取的数据都是由第三方创建的,可定制性非常有限。我们甚至不能在网站中更改它的根文件夹,而不要求他们为我们这样做。