Je vérifie si un fichier existe avec
if(!File.Exists(myPath))
{
File.Create(myPath);
}
Cependant, lorsque je crée un StreamReader
avec ce fichier nouvellement créé, un message d'erreur s'affiche:
Le processus ne peut pas accéder au fichier '[mon chemin de fichier ici]' car il est utilisé par un autre processus.
Je ne peux pas appeler File.Close(myPath)
pour qu'il soit fermé après sa création. Comment libérer cette ressource afin de pouvoir l'ouvrir ultérieurement dans mon programme?
File.Create(string)
renvoie une instance de la classe FileStream
class . Vous pouvez appeler la méthode 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();
Cependant, comme FileStream
implémente IDisposable
, vous pouvez tirer parti de l’instruction using
(généralement le moyen préféré de gérer une situation comme celle-ci). Cela garantira que le flux est fermé et éliminé correctement lorsque vous avez terminé:
using (var myFile = File.Create(myPath))
{
// interact with myFile here, it will be disposed automatically
}
La fonction retourne un objet FileStream
. Vous pouvez donc 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();
File.Create
Renvoie un objet FileStream
sur lequel vous pouvez appeler Close()
on.
La raison en est qu'un FileStream est renvoyé par votre méthode pour créer un fichier. Vous devez renvoyer le FileStream dans une variable ou appeler la méthode close directement après la File.Create.
Il est recommandé de laisser le bloc using vous aider à implémenter le modèle IDispose pour une tâche comme celle-ci. Peut-être que ce qui pourrait fonctionner mieux serait:
if(!File.Exists(myPath)){
using(FileStream fs = File.Create(myPath))
using(StreamWriter writer = new StreamWriter(fs)){
// do your work here
}
}
File.WriteAllText(file,content)
créer une écriture proche
File.WriteAllBytes-- type binary
:)