要檢測文件被那個進程占用,需要使用微軟提供的工具Handle.exe,這里有微軟提供的下載
我們可以在c#中調用Handle.exe 來檢測到底哪個進程占用了文件
string fileName = @"c:\aaa.doc";//要檢查被那個進程占用的文件 Process tool = new Process(); tool.StartInfo.FileName = "handle.exe"; tool.StartInfo.Arguments = fileName+" /accepteula"; tool.StartInfo.UseShellExecute = false; tool.StartInfo.RedirectStandardOutput = true; tool.Start(); tool.WaitForExit(); string outputTool = tool.StandardOutput.ReadToEnd(); string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)"; foreach(Match match in Regex.Matches(outputTool, matchPattern)) { Process.GetProcessById(int.Parse(match.Value)).Kill(); }
簡單而有效。