Lorsque j'exécute le code ci-dessous, j'obtiens l'exception commune The process cannot access the file *filePath* because it is being used by another process
.Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus
Quel est le moyen le plus efficace pour permettre à ce thread d'attendre qu'il puisse accéder à ce fichier en toute sécurité?
Hypothèses:
- le fichier vient d'être créé par moi, il est donc peu probable qu'une autre application y accède.
- Plusieurs threads de mon application peuvent essayer d'exécuter ce code pour ajouter du texte au fichier.
:
using (var fs = File.Open(filePath, FileMode.Append)) //Exception here
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(text);
}
}
Jusqu'à présent, le meilleur que je suis venu avec est le suivant. Y a-t-il des inconvénients à le faire?
private static void WriteToFile(string filePath, string text, int retries)
{
const int maxRetries = 10;
try
{
using (var fs = File.Open(filePath, FileMode.Append))
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(text);
}
}
}
catch (IOException)
{
if (retries < maxRetries)
{
Thread.Sleep(1);
WriteToFile(filePath, text, retries + 1);
}
else
{
throw new Exception("Max retries reached.");
}
}
}
dans mon cas, cela lance toujours la même exception. est-ce que je manque quelque chose? –
@MauroBilotti: Etes-vous sûr que votre processus est le seul à accéder au fichier? – Oliver
Oliver, ça marche, le fait est que j'ai dû changer l'accès aux fichiers en mode 'read' parce que je l'ouvrais de cette façon. Merci! Je vais vous upvote –