我正在Windows下用C ++ MFC编写桌面应用程序。
应用程序创建索引文件,并一次又一次地向其写入信息。
如果应用程序崩溃,则下次应用程序启动时,它将删除已崩溃的索引文件并创建一个新文件。我认为在某些情况下,索引文件将被锁定。如果我无法删除锁定的索引文件,那将是一场灾难。
如何保证我可以删除该文件并创建一个新文件?我可以确保没有其他应用程序打开索引文件。它只是因为应用程序崩溃而无法删除。
任何人都可以帮忙吗?
答案 0 :(得分:7)
如果没有进程保持文件打开,则无法保持锁定状态。您可能会发现,只要您的崩溃进程确实死亡(而不是挂起),您就没有问题。
如果确实需要确保可以从一个进程中删除该文件,而另一个进程打开该文件,则需要使用FILE_SHARE_DELETE
标志打开它的两个进程。
答案 1 :(得分:3)
要解锁文件,您应该关闭与其关联的所有句柄。最好的方法是终止仍在运行的崩溃应用程序(并拥有文件句柄)。
要查找崩溃的应用程序,您可以使用this文章中描述的技术。这是Process Explorer在搜索具有指定名称的文件句柄时的作用。
答案 2 :(得分:0)
最有可能的答案是“你无法删除锁定的文件”。操作系统不会让你。
相反,我会用这样的东西解决它。
奖励积分: 允许用户“恢复”崩溃的索引文件,而不是自动删除它们。
答案 3 :(得分:0)
有时可以重命名锁定的文件。不过,你应该解决真正的问题而不是症状。
答案 4 :(得分:0)
我可以推荐使用此工具:http://lockhunter.com/download.htm
通过能够删除'%appdata%/ Skype / my-user-profile'帮助我在Windows 8上解锁我的Skype帐户,而其他工具和程序在我的情况下没有帮助(参考“另一个Skype)实例可能存在“,其中很长一段时间也咬住了很多其他用户。”
答案 5 :(得分:0)
对于一次性解决方案,请进入安全模式并删除它。我在编译器中构建C盘时,它的.exe驱动器被锁定,没有任何办法可以将其删除,包括重新启动。但是,在安全模式下,我可以将其删除。