C# 如何在检查文件是否存在后删除文件

C# 如何在检查文件是否存在后删除文件,c#,.net,windows,C#,.net,Windows,如何删除C#中的文件,例如C:\test.txt,尽管使用与批处理文件相同的方法,例如 if exist "C:\test.txt" delete "C:\test.txt" else return nothing (ignore) 使用该类非常简单 正如注释中指出的,实际上不需要执行文件.Exists检查,因为文件.Delete不会在文件不存在时引发异常,尽管如果使用绝对路径,则需要检查以确保整个文件路径有效 if (File.Exists(path)) { File.De

如何删除C#中的文件,例如
C:\test.txt
,尽管使用与批处理文件相同的方法,例如

if exist "C:\test.txt"

delete "C:\test.txt"

else 

return nothing (ignore)

使用该类非常简单


正如注释中指出的,实际上不需要执行
文件.Exists
检查,因为
文件.Delete
不会在文件不存在时引发异常,尽管如果使用绝对路径,则需要检查以确保整个文件路径有效

if (File.Exists(path))
{
    File.Delete(path);
}
但是

只要文件夹存在,就会执行相同的操作。

像这样使用:

System.IO.File.Delete(@“C:\test.txt”)

从文件中:

如果要删除的文件不存在,则不会引发异常


如果要避免出现
DirectoryNotFoundException
,则需要确保文件的目录确实存在<代码>文件。存在完成此操作。另一种方法是利用
路径
目录
实用程序类,如下所示:

string file = @"C:\subfolder\test.txt";
if (Directory.Exists(Path.GetDirectoryName(file)))
{
    File.Delete(file);
}

如果您正在使用FileStream读取该文件,然后想要删除它,请确保在调用file.delete(path)之前关闭FileStream。我有这个问题

var filestream = new System.IO.FileStream(@"C:\Test\PutInv.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
filestream.Close();
File.Delete(@"C:\Test\PutInv.txt");

有时,无论发生什么情况,都要删除文件(无论发生什么异常,请务必删除该文件)。对于这种情况

public static void DeleteFile(string path)
        {
            if (!File.Exists(path))
            {
                return;
            }

            bool isDeleted = false;
            while (!isDeleted)
            {
                try
                {
                    File.Delete(path);
                    isDeleted = true;
                }
                catch (Exception e)
                {
                }
                Thread.Sleep(50);
            }
        }

注意:如果指定的文件不存在,则不会引发异常。

您可以使用以下方法导入
System.IO
命名空间:

using System.IO;
如果文件路径表示文件的完整路径,则可以检查其存在性并按如下方式删除它:

if(File.Exists(filepath))
{
     try
    {
         File.Delete(filepath);
    } 
    catch(Exception ex)
    {
      //Do something
    } 
}  

这将是最简单的方法

if (System.IO.File.Exists(filePath)) 
{
  System.IO.File.Delete(filePath);
  System.Threading.Thread.Sleep(20);
}
Thread.sleep
将有助于完美工作,否则,如果复制或写入文件,将影响下一步

我做的另一个方法是

if (System.IO.File.Exists(filePath))
{
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.IO.File.Delete(filePath);
}

实际上并不需要那个测试。请参阅我的帖子。如果您想防止可能的DirectoryNotFoundException,那么测试是必要的。该测试不应该用来代替异常处理tho,而应该与它一起进行。任何数量的场景都可能导致exists检查返回true并抛出Delete。为什么在文件路径之前有一个
@
?对我来说,它可以在没有@的情况下工作。使您不必将反斜杠加倍。如果“指定的路径无效(例如,它位于未映射的驱动器上)”,则会引发DirectoryNotFoundException。这太奇怪了。Intellisense说,如果指定的文件不存在,将引发异常。。也许您使用的是不同版本的.NET framework?我使用的是.Net4,看起来Intellisense是错误的。我已运行检查,没有异常。是的,我尝试过,只是
System.IO.file.Delete(@“C:\test.txt”)就足够了。感谢或使用
using
语句,其中
File.Delete()
将超出括号。在您的示例中,还应该执行
filestream.Dispose()。所以您尝试每秒删除文件20次,直到删除为止。若由于某种原因,文件无法删除,程序将尝试永远删除它,那个该怎么办?我认为这不是一个好的解决方案。至少,您应该提供一个超时参数。@kv1dr right。我认为如果文件没有被删除,你应该在有限的时间内尝试并返回一条失败消息。为什么不直接发出Delete调用并捕获任何表明文件不存在的异常呢?我想可能会抛出更多的异常。
using System.IO;
if(File.Exists(filepath))
{
     try
    {
         File.Delete(filepath);
    } 
    catch(Exception ex)
    {
      //Do something
    } 
}  
if (System.IO.File.Exists(filePath)) 
{
  System.IO.File.Delete(filePath);
  System.Threading.Thread.Sleep(20);
}
if (System.IO.File.Exists(filePath))
{
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.IO.File.Delete(filePath);
}