J'ai un scénario dans lequel je dois vérifier si un fichier txt existe, si ce n'est pas le cas, je dois le créer.
Immédiatement après cela, je dois remplir le fichier avec du texte.
Voici à quoi ressemble mon code:
if (!File.Exists(_filePath)) { File.Create(_filePath); } using (var streamWriter = File.AppendText(_filePath)) { //Write to file }
Je reçois une exception ( System.IO.IOException
) à la ligne 5, uniquement lorsque un nouveau fichier doit être créé. Voici l'exception:
Le processus ne peut pas accéder au fichier '** chemin du fichier expurgé **' car il est utilisé par un autre processus.
Je ne veux pas ajouter quelque chose comme Thread.Sleep (1000);
, car c'est une mauvaise solution.
Existe-t-il un moyen de savoir quand le fichier est gratuit encore une fois, pour que je puisse y écrire?
3 Réponses :
Utilisez simplement StreamWriter avec le paramètre append = true
. Il créera le fichier si nécessaire.
using (StreamWriter sw = new StreamWriter(_filePath, true, Encoding.Default)) { sw.WriteLine("blablabla"); }
En fait, OP peut simplement utiliser le code qu'il a déjà - File.AppendText ()
créera le fichier s'il n'existe pas. Ils ont juste besoin de supprimer le code File.Create ()
et tout ira bien.
Matthew Watson, définitivement)
Vous étiez si proche, supprimez simplement le premier if
, le File.AppendText
fera l'affaire pour vous et créera le fichier sinon.
using (var streamWriter = File.AppendText(_filePath)) { //write to file }
La méthode FileCreate renvoie Filestream qui doit être fermée avant d'utiliser StreamWriter
if (!File.Exists(_filePath)) { // close fileStream File.Create(_filePath).Close(); } using (var streamWriter = File.AppendText(_filePath)) { //Write to file }
Utilisez
File.Create (_filePath) .Close ();
.File.Create ()
retourne un fichier ouvert qui ne sera pas fermé tant que son finaliseur ne sera pas exécuté comme effet secondaire du garbage collection, sauf si vous le fermez explicitement. Mais vous ne devriez pas avoir besoin de le créer séparément comme ça.Pourquoi créer le fichier? Crée un StreamWriter qui ajoute du texte encodé en UTF-8 à un fichier existant ou à un nouveau fichier si le fichier spécifié n'existe pas.
Vous devez fermer le flux de fichiers après la création ou écrire immédiatement, comme dans msdn
@PavelAnikhouski L'instruction using fermera et supprimera le streamwriter.
File.Create
crée un fichier et ouvre un flux. Utilisez ce flux avecStreamWriter
ou utilisezFile.AppendText
sansFile.Create