78 votes

Fermeture d'un fichier après File.Create

Je vérifie si un fichier existe avec

if(!File.Exists(myPath))
{
    File.Create(myPath);
}

Cependant, lorsque je vais créer un StreamReader avec ce fichier nouvellement créé, j'obtiens une erreur disant que

Le processus ne peut pas accéder au fichier '[mon chemin de fichier ici]' car il est utilisé par un autre processus.

Il n'y a pas de File.Close(myPath) que je peux appeler pour qu'elle soit fermée après avoir été créée, alors comment libérer cette ressource pour que je puisse l'ouvrir plus tard dans mon programme ?

151voto

Donut Points 32892

File.Create(string) renvoie une instance du FileStream classe . Vous pouvez appeler le Stream.Close() sur cet objet afin de le fermer et de libérer les ressources qu'il utilise :

var myFile = File.Create(myPath);
myFile.Close();

Toutefois, étant donné que FileStream met en œuvre IDisposable vous pouvez profiter de la using déclaration (c'est généralement la meilleure façon de gérer une situation comme celle-ci). Cela permet de s'assurer que le flux est fermé et éliminé correctement lorsque vous en avez fini avec lui :

using (var myFile = File.Create(myPath))
{
   // interact with myFile here, it will be disposed automatically
}

49voto

Mario Points 16720

La fonction renvoie un FileStream objet. Ainsi, vous pouvez utiliser sa valeur de retour pour ouvrir votre StreamWriter ou le fermer en utilisant la méthode appropriée de l'objet :

File.Create(myPath).Close();

4voto

File.Create renvoie un FileStream que vous pouvez appeler Close() sur.

4voto

t3rse Points 5983

La raison en est qu'un FileStream est renvoyé par votre méthode de création de fichier. Vous devez renvoyer le FileStream dans une variable ou appeler la méthode de fermeture directement à partir de celui-ci après la méthode File.Create.

La meilleure pratique consiste à laisser le bloc using vous aider à mettre en œuvre le modèle IDispose pour une tâche de ce type. Ce qui fonctionnerait peut-être mieux serait :

if(!File.Exists(myPath)){
   using(FileStream fs = File.Create(myPath))
   using(StreamWriter writer = new StreamWriter(fs)){
      // do your work here
   }
}

3voto

danis Points 1
File.WriteAllText(file,content)

créer écrire fermer

File.WriteAllBytes--   type binary

:)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X