【问题标题】:Where in the process is a file open?文件在哪里打开?
【发布时间】:2012-04-24 06:41:34
【问题描述】:

我有一个为 Windows 平台维护的应用程序套件。我最近向共享库添加了一些代码,以在应用程序完成后删除目录。在一个应用中,删除成功;另一方面,我收到一条消息,告诉我该文件正在被另一个进程使用。

下载 Process Explorer 后,我了解到我已经预料到的情况,即持有该文件夹的进程是试图删除它的进程。

当我在谷歌上搜索答案时,我看到的只是“您需要下载 XYZ 以找出保存文件的进程,然后关闭该进程”,其中“XYZ”是 Unlocker、Process Explorer 等。我知道保存文件的进程,但如果我终止它,它如何删除文件夹?

有没有人知道如何找到打开文件夹的代码?在可用于查找哪些进程正在使用哪些文件的工具中,是否可以使用任何工具来查找该文件夹在进程中的哪个位置打开?

【问题讨论】:

  • 如果你在你的程序中打开了一个文件,你必须在删除它之前关闭它。如果您需要更精确的帮助,您应该发布一些代码
  • 也许是写在那个目录的代码?您如何看待发布该代码?
  • 我会首先检查我的程序堆栈中是否有任何fstream 对象,以及它们是否已关闭。
  • 如果您的应用程序将文件夹设置为当前文件夹(使用 chdir 或等效文件夹),您可能会收到此错误,因此请确保在尝试将其删除之前已将当前文件夹设置在其他位置。在尝试删除文件夹之前进行检查应该只是几行代码。除此之外,IMO,在拥有应用程序源的情况下尝试查找软件或工具是愚蠢的。搜索您正在打开文件或尝试删除文件或文件夹的位置的来源;您可以通过简单的grep 找到它们,这比您找到工具并学习如何使用它要快得多。

标签: c++ windows locked-files


【解决方案1】:

没有打开文件的“进程中的位置”的概念。例如。无意打开文件的一个非常常见的原因是句柄泄漏。这意味着文件被打开正是因为进程中没有文件句柄的位置。

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    相关资源
    最近更新 更多