更换PDF失败.即使在Edge-Browser中打开File.Delete()成功
本文关键字:File Delete 成功 失败 PDF Edge-Browser 更换 | 更新日期: 2023-09-27 18:07:47
目标是替换当前保存在磁盘上的pdf文件。
我正在从磁盘中删除当前的PDF文件,然后重新创建一个新的。除非PDF当前是在Microsoft Edge浏览器中打开的,否则工作正常。
// Try delete PDF-File (which is opened in Edge Browser)
var info = new FileInfo(pathToPdf);
if (info.Exists)
{
try
{
info.Delete();
// Same thing with the File.Delete call
//File.Delete(path);
Console.WriteLine("Success.");
}
catch (Exception)
{
Console.WriteLine("Failed.");
return;
}
}
即使在Edge中打开文件,我们也会得到"Success"打印输出。如果在adobereader中打开它,它将抛出一个异常(文件在使用中)。
我们创建一个新文件。(为了演示,以。pdf结尾的文本文件)
try
{
using (var writer = File.CreateText(pathToPdf))
{
writer.Write("Foo");
writer.Flush();
Console.WriteLine("Success.");
}
}
catch (Exception e)
{
Console.WriteLine("Failed.");
return;
}
我希望能够创建一个新文件,因为Delete()没有失败。然而,我得到一个UnauthorizedAccessException:"对路径'XYZ'的访问被拒绝。"
作为一种变通方法,我可以在删除文件后重新检查该文件是否存在。
var newInfo = new FileInfo(pathToPdf);
if (newInfo.Exists)
// Delete failed
但是我为什么要这样做呢?FileInfo.Delete()或File.Delete(path)不应该首先失败吗?
指出:
在Windows 10 Pro和。net Framework 4.5.1上测试
文件被代码删除后(在Edge中打开时)在文件资源管理器中仍然可以看到其原始文件大小。
当通过代码删除文件后关闭边缘浏览器时,文件从文件资源管理器中消失,我可以通过编程创建一个新文件。
此问题仅在Edge中打开pdf时发生。当使用文本文件代替文本文件被正确删除
任何澄清和帮助都是感激的。
最好的克里斯。
如果文件不存在,FileInfo.Delete()
不做任何操作。
WinNt4Family
Delete不删除为正常I/O打开的文件或内存映射的文件。
当路径是一个目录时,你会得到一个UnauthorizedAccessException。
如果Edge在句柄上设置了FILE_SHARE_DELETE,则即使该句柄存在,其他进程也可以成功调用File.delete()。然后该文件被标记为删除,并在句柄关闭后被删除。在此之前,它在资源管理器中仍然可见,但无法访问。
要获得更详细的解释,请参阅这篇文章:
使用Files.delete()删除文件时的异常行为