Как удалить файл после проверки, существует ли он - PullRequest
195 голосов
/ 18 июня 2011

Как я могу удалить файл в C #, например, C:\test.txt, хотя применять такой же метод, как в пакетных файлах, например,

if exist "C:\test.txt"

delete "C:\test.txt"

else 

return nothing (ignore)

Ответы [ 10 ]

354 голосов
/ 18 июня 2011

Это довольно просто, используя File class.

if(File.Exists(@"C:\test.txt"))
{
    File.Delete(@"C:\test.txt");
}


Как указано Chris в комментариях, вам на самом деле не нужночтобы выполнить проверку File.Exists, поскольку File.Delete не выдает исключение, если файл не существует, хотя, если вы используете абсолютные пути, вам понадобится проверка, чтобы убедиться, что полный путь к файлу действителен.
91 голосов
/ 18 июня 2011

Используйте System.IO.File.Delete примерно так:

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

Из документации:

Еслиудаляемый файл не существует, исключение не выдается.

32 голосов
/ 18 июня 2011
if (System.IO.File.Exists(@"C:\test.txt"))
    System.IO.File.Delete(@"C:\test.txt"));

, но

System.IO.File.Delete(@"C:\test.txt");

будет делать то же самое, пока существует папка.

29 голосов
/ 17 августа 2017

Вы можете импортировать пространство имен System.IO, используя:

using System.IO;

Если путь к файлу представляет полный путь к файлу, вы можете проверить его существование и удалить его следующим образом:

if(File.Exists(filepath))
{
     try
    {
         File.Delete(filepath);
    } 
    catch(Exception ex)
    {
      //Do something
    } 
}  
21 голосов
/ 22 июля 2013

Если вы хотите избежать DirectoryNotFoundException, вам нужно убедиться, что каталог файла действительно существует.File.Exists выполняет это.Другой способ - использовать служебные классы Path и Directory следующим образом:

string file = @"C:\subfolder\test.txt";
if (Directory.Exists(Path.GetDirectoryName(file)))
{
    File.Delete(file);
}
15 голосов
/ 08 апреля 2014
  if (System.IO.File.Exists(@"C:\Users\Public\DeleteTest\test.txt"))
    {
        // Use a try block to catch IOExceptions, to 
        // handle the case of the file already being 
        // opened by another process. 
        try
        {
            System.IO.File.Delete(@"C:\Users\Public\DeleteTest\test.txt");
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine(e.Message);
            return;
        }
    }
10 голосов
/ 18 июня 2011
if (File.Exists(path))
{
    File.Delete(path);
}
1 голос
/ 16 августа 2017

Иногда вы хотите удалить файл в любом случае (вне зависимости от исключения, пожалуйста, удалите файл).Для таких ситуаций.

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);
            }
        }

Примечание. Исключение не выдается, если указанный файл не существует.

1 голос
/ 19 августа 2016

Если вы читаете из этого файла, используя FileStream, а затем хотите удалить его, убедитесь, что вы закрыли FileStream, прежде чем вызывать File.Delete (путь). У меня была эта проблема.

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");
0 голосов
/ 28 июня 2019

Это будет самый простой способ,

if (System.IO.File.Exists(filePath)) 
{
  System.IO.File.Delete(filePath);
  System.Threading.Thread.Sleep(20);
}

Thread.sleep поможет отлично работать, иначе это повлияет на следующий шаг, если мы будем копировать или записывать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...