以下代码无法删除文件并打印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);
}
如果这很重要,则使用以下代码从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();
答案 0 :(得分:6)
删除文件不可以保证文件实际上将从文件系统中删除。该文件可能已被另一个进程打开,该进程明确指定了删除共享。与读写共享非常相似。也可以在.NET中使用,您可以将FileShare.Delete传递给FileStream构造函数。
但是,在所有进程关闭文件之前,当然不能删除物理文件。所以它超出了File.Delete()调用,也可以通过File.Exists()看到。打开文件不再有效,拒绝访问将被拒绝。否则是从不使用File.Exists()的一个很好的理由,它有很多问题。
如果您想知道其他进程打开了哪个进程,那么您可以使用SysInternals的Handle或Process Explorer之类的实用程序。期待找回像病毒扫描程序或搜索索引器这样的程序,但可能是任何东西。像.NET程序一样:))
答案 1 :(得分:1)
来自MSDN:
如果要删除的文件不存在,则不会抛出任何异常。
确保您的路径存在。我知道你说过你,但再次检查。
确保您达到实际的File.Delete
行
干杯
答案 2 :(得分:0)
之前我遇到过同样的问题,请按照步骤查看它是否对您有所帮助。听起来很傻。确保除您之外的任何进程都没有使用您创建的文件?这个应用程序是多线程的吗?你有运行使用该文件的服务吗?
确保您未处于调试模式,并执行Build - Clean
检查文件是否仍在该位置并复制文件路径。
在删除文件之前设置一个断点。
在您放置break-point
。
按F5
进行调试并逐步执行代码。
检查文件路径是否与您拥有的文件路径匹配。
答案 3 :(得分:0)
我试图用我自己的代码重现类似的情况
string fn = @"C:\Users\Public\Pictures\Sample Pictures\Desert - Copy.jpg";
//The file is locked by Image.FromFile
Image img = Image.FromFile(fn);
//If img.Dispose() here, then file is unlocked and can be deleted
if (File.Exists(fn))
{
try
{
File.Delete(fn);
Debug.WriteLine("file delete: " + fn);
}
catch
{
//Caught
Debug.WriteLine("Could not delete: " + fn);
}
}
else
{
Debug.WriteLine("File doesn't exist: " + fn);
}
我发现该文件被Image.FromFile()
锁定,因此无法删除。
出于同样的原因,我相信您的文件路径fn被Filestream ftream
你可以尝试吗
fStream.Dispose();
在删除过程之前并重新运行程序以查看是否可以删除该文件?谢谢。如果需要,你可以处理fstream并创建一个新的,对吗?