如何删除被锁定的文件?

时间:2009-09-15 13:00:07

标签: file mfc locking delete-file

我正在Windows下用C ++ MFC编写桌面应用程序。

应用程序创建索引文件,并一次又一次地向其写入信息。

如果应用程序崩溃,则下次应用程序启动时,它将删除已崩溃的索引文件并创建一个新文件。我认为在某些情况下,索引文件将被锁定。如果我无法删除锁定的索引文件,那将是一场灾难。

如何保证我可以删除该文件并创建一个新文件?我可以确保没有其他应用程序打开索引文件。它只是因为应用程序崩溃而无法删除。

任何人都可以帮忙吗?

6 个答案:

答案 0 :(得分:7)

如果没有进程保持文件打开,则无法保持锁定状态。您可能会发现,只要您的崩溃进程确实死亡(而不是挂起),您就没有问题。

如果确实需要确保可以从一个进程中删除该文件,而另一个进程打开该文件,则需要使用FILE_SHARE_DELETE标志打开它的两个进程。

答案 1 :(得分:3)

要解锁文件,您应该关闭与其关联的所有句柄。最好的方法是终止仍在运行的崩溃应用程序(并拥有文件句柄)。

要查找崩溃的应用程序,您可以使用this文章中描述的技术。这是Process Explorer在搜索具有指定名称的文件句柄时的作用。

答案 2 :(得分:0)

最有可能的答案是“你无法删除锁定的文件”。操作系统不会让你。

相反,我会用这样的东西解决它。

  • 检查现有索引文件,如果没有锁定则删除它们。
  • 创建一个新的索引文件,如果是第一个“名称”,检查index01,依此类推,直到找到一个未使用的文件,然后将其用作执行该程序的索引文件。
  • 在正常退出时,清除索引文件。

奖励积分: 允许用户“恢复”崩溃的索引文件,而不是自动删除它们。

答案 3 :(得分:0)

有时可以重命名锁定的文件。不过,你应该解决真正的问题而不是症状。

答案 4 :(得分:0)

我可以推荐使用此工具:http://lockhunter.com/download.htm

通过能够删除'%appdata%/ Skype / my-user-profile'帮助我在Windows 8上解锁我的Skype帐户,而其他工具和程序在我的情况下没有帮助(参考“另一个Skype)实例可能存在“,其中很长一段时间也咬住了很多其他用户。”

答案 5 :(得分:0)

对于一次性解决方案,请进入安全模式并删除它。我在编译器中构建C盘时,它的.exe驱动器被锁定,没有任何办法可以将其删除,包括重新启动。但是,在安全模式下,我可以将其删除。