当我试图从文件夹中删除报告时,会出现此错误
本文关键字:错误 报告 删除 文件夹 | 更新日期: 2023-09-27 18:22:47
进程无法访问该文件,因为它正被另一个进程使用
private void DeleteReport()
{
int invid = Convert.ToInt32(Session["InvId"]);
string FileName = invid + "_Report" + ".pdf";
string path1 = Server.MapPath("~/Report/" + FileName);
if (File.Exists(path1))
{
File.Delete(path1);
}
}
错误告诉您,文件已被使用,无法删除。所以没什么错。由于您没有制定真正的问题,让我们试着用以下方式来帮助你们。
我想只有你的程序在使用报告,所以很好,你屏蔽了报告在其他地方。
例如,以下代码
string path = "C:''Temp''test.txt";
FileStream file = File.Open(path, FileMode.OpenOrCreate);
if (File.Exists(path))
File.Delete(path);
会引发同样的错误。这并不一定意味着这个过程就是另一个过程。
例如,出于测试目的,您可以安装SysInternalhttp://technet.microsoft.com/en-us/sysinternals/bb896655.aspx并在您的文件。删除语句。然后你会看到,什么过程使用文件:
try
{
File.Delete(path);
}
catch (Exception)
{
using (Process tool = new Process())
{
tool.StartInfo.FileName = @"C:'Program Files (x86)'SysinternalsSuite'handle.exe"; //Your path
tool.StartInfo.Arguments = path + " /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 p = Process.GetProcessById(int.Parse(match.Value));
MessageBox.Show(p.ProcessName); // OR LOG IT
}
}
throw;
}
对的handle.exe调用的信用https://stackoverflow.com/a/1263609/2707156