File.Delete无声地失败 - 如何调试?

0 .net c#

以下代码无法删除文件并打印,file delete:因此我知道该文件存在.打开我的应用程序后,我可以删除文件资源管理器中的文件.

我该怎么调试呢?

1)文件权限?我的应用创建了文件,所以应该可以删除?无论它会抛出异常并点击我的catch调试消息.

2)文件存在!根据文件,除了不存在之外的任何其他失败都应该在我的捕获中抓住......

if (File.Exists(fn))
{
     Debug.WriteLine("file delete: " + fn);
     try
     {
         File.Delete(fn);
     }
     catch
     {
         Debug.WriteLine("Could not delete: " + fn);
     }
} else {
     Debug.WriteLine("File doesn't exist: "+fn);
}
Run Code Online (Sandbox Code Playgroud)

如果这很重要,则使用以下代码从RichTextBox保存文件.

TextRange range;
FileStream fStream;
range = new TextRange(mNotepad.Document.ContentStart, mNotepad.Document.ContentEnd);
fStream = new FileStream(fn, FileMode.Create);
range.Save(fStream, DataFormats.XamlPackage);
fStream.Close();
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

删除文件不能保证文件实际上将从文件系统中删除.该文件可能已被另一个进程打开,该进程明确指定了删除共享.与读写共享非常相似.也可以在.NET中使用,您将FileShare.Delete传递给FileStream构造函数.

但是,在所有进程关闭文件之前,当然不能删除物理文件.所以它超出了File.Delete()调用,也可以通过File.Exists()看到.打开文件不再有效,拒绝访问将被拒绝.否则是永远不会使用File.Exists()的一个很好的理由,它有很多问题.

如果要查找文件打开的其他进程,则可以使用SysInternals的Handle或Process Explorer等实用程序.期待找回像病毒扫描程序或搜索索引器这样的程序,但可能是任何东西.像.NET程序:)