Comment supprimer un fichier après avoir vérifié s'il existe

220

Comment puis-je supprimer un fichier en C # par exemple C:\test.txt, bien que j'applique le même type de méthode que dans les fichiers batch, par exemple

if exist "C:\test.txt"

delete "C:\test.txt"

else 

return nothing (ignore)
À M
la source

Réponses:

388

C'est assez simple en utilisant la classe File .

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


Comme Chris l'a souligné dans les commentaires, vous n'avez pas réellement besoin de faire la File.Existsvérification car File.Deletene lève pas d'exception si le fichier n'existe pas, bien que si vous utilisez des chemins absolus, vous aurez besoin de la vérification pour vous assurer que le le chemin de fichier entier est valide.

Adam Lear
la source
13
Ce test n'est pas vraiment nécessaire. Voir mon post.
Chris Eberle
20
Le test est nécessaire si vous souhaitez empêcher une éventuelle exception DirectoryNotFoundException.
Timothy Strimple
7
Le test ne doit pas être utilisé à la place d'une gestion d'exception, mais plutôt en conduction avec lui. Un certain nombre de scénarios peuvent entraîner le retour de la vérification existante et la suppression de la suppression.
Josh
1
Pourquoi y a-t-il un @avant le chemin du fichier? Pour moi ça marche sans.
Pascal Ackermann
5
@ vous évite d'avoir à doubler les barres obliques inverses.
PRMan
105

Utilisez System.IO.File.Delete comme ceci:

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

De la documentation:

Si le fichier à supprimer n'existe pas, aucune exception n'est levée.

Chris Eberle
la source
7
Cela lèvera une exception DirectoryNotFoundException si "le chemin spécifié n'est pas valide (par exemple, il se trouve sur un lecteur non mappé)."
Timothy Strimple
5
Tellement bizzare. Dit Intellisense An exception is thrown if the specified file does not exist.
fearofawhackplanet
Vous utilisez peut-être une version différente du framework .NET?
Chris Eberle
1
J'utilise .Net4, il semble que l'intellisense soit faux J'ai effectué un contrôle et aucune exception n'est levée
fearofawhackplanet
3
Ouais j'ai essayé et c'est juste System.IO.File.Delete(@"C:\test.txt");assez. Merci
Berkay Turancı
34

Vous pouvez importer l' System.IOespace de noms en utilisant:

using System.IO;

Si le chemin d'accès au fichier représente le chemin d'accès complet au fichier, vous pouvez vérifier son existence et le supprimer comme suit:

if(File.Exists(filepath))
{
     try
    {
         File.Delete(filepath);
    } 
    catch(Exception ex)
    {
      //Do something
    } 
}  
mishel vettukattil
la source
2
Pourquoi ne pas simplement lancer l'appel Supprimer et intercepter toute exception indiquant que le fichier n'existait pas?
colère
32
if (System.IO.File.Exists(@"C:\test.txt"))
    System.IO.File.Delete(@"C:\test.txt"));

mais

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

fera de même tant que le dossier existe.

Vercas
la source
23

Si vous voulez éviter cela, DirectoryNotFoundExceptionvous devrez vous assurer que le répertoire du fichier existe bien. File.Existsaccomplit cela. Une autre façon serait d'utiliser les classes utilitaires Pathet Directorycomme ceci:

string file = @"C:\subfolder\test.txt";
if (Directory.Exists(Path.GetDirectoryName(file)))
{
    File.Delete(file);
}
Derek W
la source
15
  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;
        }
    }
Ahmed Ghazey
la source
11
if (File.Exists(path))
{
    File.Delete(path);
}
ecMode
la source
1

Si vous lisez à partir de ce fichier à l'aide de FileStream et que vous souhaitez ensuite le supprimer, assurez-vous de fermer le FileStream avant d'appeler le File.Delete (chemin). J'ai eu ce problème.

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");
ag93
la source
Ou utilisez une usingdéclaration, où le File.Delete()serait en dehors des crochets. Dans l'exemple que vous avez, vous devez également faire un filestream.Dispose();.
vapcguy
1

Parfois, vous souhaitez supprimer un fichier quel que soit le cas (quelle que soit l'exception, veuillez supprimer le fichier). Pour de telles situations.

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

Remarque: Une exception n'est pas levée si le fichier spécifié n'existe pas.

Hameed Syed
la source
10
Vous essayez donc de supprimer le fichier 20 fois par seconde jusqu'à ce qu'il soit supprimé. Que faire si, pour une raison quelconque, le fichier ne peut pas être supprimé et que le programme essaiera de le supprimer pour toujours? Je ne pense pas que ce soit une bonne solution.
kv1dr
2
À tout le moins, vous devez fournir un paramètre de délai d'expiration.
colère
@ kv1dr à droite. Je pense que vous devriez essayer pendant un temps limité et renvoyer un message d'échec si le fichier n'a pas été supprimé.
QMaster
0

Ce sera le moyen le plus simple,

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

Thread.sleep aidera à fonctionner parfaitement, sinon, cela affectera l'étape suivante si nous copions ou écrivons le fichier.

Une autre façon que j'ai fait est,

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