任务管理器中查看文件被哪个进程占用

我们应该会经常遇到这样的情况,当删除一个文件或者文件夹时,提示无法删除,文件被占用;但是提示信息中有时并未给出是被哪个进程所占用,如果能找出文件被哪个进程占用,然后杀死相应的进程,文件就能被删除。

写一个程序,如下所示:

#include "stdafx.h"
#include <Windows.h>
#include <string>

int main()
{
	char szFilePath[MAX_PATH + 1] = { 0 };
	GetModuleFileName(NULL, szFilePath, MAX_PATH);
	std::string strFilePath = szFilePath;
	size_t posTemp = strFilePath.find_last_of("\\");
	std::string strCurrDir = strFilePath.substr(0, posTemp);
	std::string strFile = strCurrDir + "\\" + "TestFile\\1.txt";
	HANDLE hFile = CreateFile(strFile.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
	while (1);
    return 0;
}

上面的例子很简单,在进程的当前目录下的TestFile目录下,有个1.txt文件,进程打开此文件,然后手工删除此1.txt所在文件夹TestFile,报下面这样的错误。
在这里插入图片描述
此时打开任务管理器,进入到性能选项卡,如下所示:
在这里插入图片描述
然后打开资源监视器,如下所示:
在这里插入图片描述
切换到cpu选项卡,在关联的句柄里面输入文件名称或者文件夹名称,如下所示:
在这里插入图片描述
这里面输入的是TestFile,输入后,下面会显示正在搜索的字样,因为这里面会遍历所有的进程,枚举进程打开的文件名,所以会花费少许时间,最终结果出来了,如下图所示:
在这里插入图片描述
很明显,OpenFile.exe打开了相应的资源。

**注意:**关联的句柄也可以输入1.txt,只要句柄名称中有此字符串即可,
目前笔者在win7和win10上都有测试过。

猜你喜欢

转载自blog.csdn.net/tusong86/article/details/105934609