Lire les Modifications sur un fichier texte dynamiquement c#
J'ai un programme qui écrit en permanence son journal dans un fichier texte.
Je n'ai pas le code source, donc je ne peux pas le modifier de quelque manière, et il est aussi protégé par Themida.
J'ai besoin de lire le fichier journal et exécuter des scripts en fonction du contenu du fichier.
Je ne peux pas supprimer le fichier parce que le programme continue d'écrire à ce qu'il soit verrouillé le fichier.
Alors quelle sera la meilleure façon de lire le fichier et lire les nouvelles lignes du fichier?
La sauvegarde de la dernière position de la ligne? Ou est-il quelque chose qui sera utile pour le résoudre dans C#?
Liées à la stackoverflow.com/questions/13185319/...
OriginalL'auteur Ricardo Umpierrez | 2013-10-07
Vous devez vous connecter pour publier un commentaire.
Peut-être utiliser le FileSystemWatcher avec l'ouverture du fichier avec partage de fichiers (tel qu'il est utilisé par un autre processus). Hans Passant a fourni une belle réponse pour cette partie ici:
Jetez un oeil à cette question et de la accepté de répondre à ce qui peut aussi aider.
OriginalL'auteur Jeb
J'ai testé le code ci-dessus et cela fonctionne si vous essayez de lire une ligne à la fois. Le seul problème est que si la ligne est vidée dans le fichier avant qu'il est fini d'être écrit ensuite lire la ligne en plusieurs parties. Tant que le système d'enregistrement est écrit chaque ligne de tous à la fois, il devrait être correct.
Si non, alors vous voudrez peut-être lire dans une mémoire tampon au lieu d'utiliser ReadLine, de sorte que vous pouvez analyser le tampon de vous-même par la détection de chaque Environnement.Nouvelle ligne de sous-chaîne.
OriginalL'auteur Trevor Elliott
Vous pouvez juste continuer à l'appeler ReadToEnd() dans une boucle serrée. Même après qu'il a atteint la fin du fichier, il vous suffit de renvoyer une chaîne vide "". Si certains, plus les données sont écrites sur le fichier, il va ramasser sur un appel ultérieur.
Garder à l'esprit que vous pouvez lire des lignes partielles de cette façon. Aussi, si vous êtes face à de très gros fichiers, vous aurez probablement besoin d'une autre approche.
OriginalL'auteur Weyland Yutani
Utiliser le filesystemwatcher pour détecter les changements et obtenir de nouvelles lignes à l'aide de la dernière position de lecture et de rechercher le fichier.
http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx
OriginalL'auteur Francis
Le fichier journal est d'être continuellement mis à jour de sorte que vous ne devriez pas utiliser
FileSystemWatcher
pour déclencher un événement à chaque fois que le fichier est modifié. Ce serait le déclenchement en permanence, et vous savez déjà qu'il sera très souvent en train de changer.Je suggérerais à l'aide d'un événement timer périodique de traiter le fichier. Lire cette SORTE de réponse pour un bon modèle à utiliser
System.Threading.Timer
1. Maintenir un flux de fichier ouvert pour la lecture ou de rouvrir à chaque fois et Chercher à la position de fin de votre dernière lecture. Par "dernière lecture" je veux dire que vous devriez encapsuler la lecture et la validation d'un journal complet de la ligne. Une fois que vous avez correctement lu et validé un journal ligne, alors vous avez un nouveau poste pour la prochaineSeek
.1 Notez que
System.Threading.Timer
s'exécuter sur un système fourni thread qui est conservé dans l'entreprise par l' ThreadPool. Pour les opérations de courte durée, ce qui est plus souhaitable qu'un thread dédié.OriginalL'auteur jltrem
Utiliser cette réponse sur un autre post c# continue de lire le fichier.
Celui-ci est très efficace, et il vérifie une fois par seconde si la taille du fichier a changé. Si le fichier n'est généralement pas verrouillé en lecture comme un résultat.
Autres réponses sont tout à fait valable et simple. Un couple d'entre eux va lire-verrouiller le fichier en permanence, mais ce n'est probablement pas un problème pour la plupart.
OriginalL'auteur Todd