J'essaie de détecter si un fichier existe au moment de l'exécution, sinon, créez-le. Cependant, j'obtiens cette erreur lorsque j'essaye d'y écrire:
Le processus ne peut pas accéder au fichier «myfile.ext» car il est utilisé par un autre processus.
string filePath = string.Format(@"{0}\M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter sw = File.AppendText(filePath))
{
//write my text
}
Des idées pour y remédier?
File.Create()
méthode! L'extrait ci-dessus crée déjà le fichier!Je veux mettre à jour cette réponse pour dire que ce n'est pas vraiment le moyen le plus efficace d'écrire tout le texte. Vous ne devriez utiliser ce code que si vous avez besoin de quelque chose de rapide et de sale.
J'étais un jeune programmeur quand j'ai répondu à cette question, et à l'époque, je pensais que j'étais une sorte de génie pour trouver cette réponse.
la source
FileStream(string, FileMode)
constructeur et lui transmettre FileMode.Create , qui écrasera tout fichier existant. Toujours pas besoin d'ouvrir le fichier deux fois. De plus, cette réponse a été modifiée après la publication de mon commentaire original..Close()
à la fin, donc cela fonctionne dans tous les cas. Je me méfie du système d'utilisationFileStream
pour tout parce que je ne veux pas que l'exception se produise sur le faitFileMode.Create
que le fichier est déjà là - en particulier lorsque je veux effacer le contenu et ne pas y ajouterFileMode.Open
. Pour moi, celaFileStream
ne fonctionne vraiment qu'après avoir supprimé le fichier en question, puis écrit dessus. Puisqu'il leFile.Create
laisse ouvert et verrouillé, il semble que.Close()
cela soit le seul véritable moyen de gérer mon scénario et les SO.Lors de la création d'un fichier texte, vous pouvez utiliser le code suivant:
En utilisant le code de votre commentaire. Le fichier (flux) que vous avez créé doit être fermé. File.Create renvoie le flux de fichiers au fichier qui vient d'être créé:
la source
File.Create
revientFileStream
et qui aClose()
la source
File.Create renvoie un FileStream. Vous devez le fermer lorsque vous avez écrit dans le fichier:
Vous pouvez utiliser using pour fermer automatiquement le fichier.
la source
StreamWriter
comme cela peut être déduit de son utilisation deFile.AppendText
.J'ai mis à jour votre question avec l'extrait de code. Après une mise en retrait correcte, le problème est immédiatement clair: vous utilisez
File.Create()
mais ne fermez pas leFileStream
qu'il renvoie.Faire de cette façon est inutile,
StreamWriter
permet déjà d'ajouter à un fichier existant et de créer un nouveau fichier s'il n'existe pas encore. Comme ça:Qui utilise ce
StreamWriter
constructeur .la source
Cette question a déjà reçu une réponse, mais voici une solution du monde réel qui vérifie si le répertoire existe et ajoute un numéro à la fin si le fichier texte existe. J'utilise ceci pour créer des fichiers journaux quotidiens sur un service Windows que j'ai écrit. J'espère que ça aidera quelqu'un.
la source
Je sais que c'est une vieille question, mais je veux juste jeter ceci là-bas que vous pouvez toujours utiliser
File.Create("filename")"
, ajoutez-y simplement.Dispose()
.File.Create("filename").Dispose();
De cette façon, il crée et ferme le fichier pour que le processus suivant l'utilise.
la source
File.Create(FilePath).Close();
de la réponse ci-dessus athis.Dispose(true); GC.SuppressFinalize((object) this);
dans sa mise en œuvre.Je pense connaître la raison de cette exception. Vous exécutez peut-être cet extrait de code dans plusieurs threads.
la source
Essayez ceci: cela fonctionne dans tous les cas, si le fichier n'existe pas, il le créera et y écrira. Et s'il existe déjà, aucun problème il s'ouvrira et y écrira:
la source