该进程无法访问该文件,因为该文件正由另一个进程
使用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);
}
}
答案 0 :(得分:0)
错误告诉您,该文件已被使用且无法删除。所以没有错。因为你没有制定一个 真实的问题,让我们尝试以下列方式帮助您。
我想只有您的程序正在使用该报告,所以可能会阻止报告 在其他地方。
例如,以下代码
string path = "C:\\Temp\\test.txt";
FileStream file = File.Open(path, FileMode.OpenOrCreate);
if (File.Exists(path))
File.Delete(path);
引发同样的错误。这并不一定意味着该过程是另一个过程。
您可以做的是,例如,为了测试目的,安装SysInternal http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx并在您的附近添加以下代码 File.Delete语句。然后你会看到,使用该文件的进程是什么:
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
的信用