Avec le code de lecture de fichier suivant:En C#, si 2 processus sont la lecture et l'écriture dans le même fichier, quelle est la meilleure façon d'éviter des exceptions de blocage du processus?
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
using (TextReader tr = new StreamReader(fileStream))
{
string fileContents = tr.ReadToEnd();
}
}
Et le code d'écriture de fichier suivant:
using (TextWriter tw = new StreamWriter(fileName))
{
tw.Write(fileContents);
tw.Close();
}
Les détails d'exception suivants sont observés:
Le processus ne peut pas accéder au fichier « c: \ temp \ myfile.txt » parce qu'il est utilisé par un autre processus.
Quelle est la meilleure façon d'éviter cela? Le lecteur doit-il réessayer à la réception de l'exception ou existe-t-il un meilleur moyen?
Notez que le processus de lecteur utilise un FileSystemWatcher savoir quand le fichier a changé.
Notez également que, dans ce cas, je suis et non à la recherche d'autres moyens de partager les chaînes entre les deux processus.
Mais dans ce cas, si je comprends bien le fonctionnement, vous pouvez lire un fichier incomplet? –
C'est vrai, oui. Cela sera toujours le cas si vous autorisez plus d'un consommateur à accéder au fichier.La seule façon d'y parvenir et de synchroniser consiste à utiliser un fichier de verrouillage ou à intercepter l'exception d'accès et à réessayer jusqu'à obtenir un accès exclusif. –
Je suis un peu confus parce que cela semble contredire la réponse acceptée à cette question: http://stackoverflow.com/questions/25097773/system-io-filestream-fileaccess-vs-fileshare, car il stipule que pour FileAcces.ReadWrite vous devez utiliser FileShare.None. – user2481095