Comment lire les dernières lignes "n" du fichier journal
besoin d'un extrait de code qui permettrait de lire le dernier "n" premières lignes d'un fichier journal. Je suis venu avec le code suivant à partir du net.Je suis un peu nouveau pour C sharp. Depuis le fichier journal peut être
assez grand, je veux éviter la surcharge de la lecture de la totalité du fichier.Quelqu'un peut-il suggérer toute amélioration de la performance. Je n'ont pas vraiment envie de lire chaque caractère et de changer de position.
var reader = new StreamReader(filePath, Encoding.ASCII);
reader.BaseStream.Seek(0, SeekOrigin.End);
var count = 0;
while (count <= tailCount)
{
if (reader.BaseStream.Position <= 0) break;
reader.BaseStream.Position--;
int c = reader.Read();
if (reader.BaseStream.Position <= 0) break;
reader.BaseStream.Position--;
if (c == '\n')
{
++count;
}
}
var str = reader.ReadToEnd();
source d'informationauteur frictionlesspulley
Vous devez vous connecter pour publier un commentaire.
Votre code s'effectuer très mal, puisque vous n'êtes pas permettant à toute mise en cache à arriver.
En outre, il ne fonctionnera pas à tous les pour Unicode.
J'ai écrit la suite de la mise en œuvre:
Un de mes amis utilise cette méthode (
BackwardReader
peut être trouvé ici):Voici ma réponse:-
Remarque:-
Profitez-en!
Avait des problèmes avec votre code. C'est ma version. Depuis sa un fichier journal, quelque chose pourrait être écrit pour elle, il est donc préférable de s'assurer que vous n'êtes pas de la fermeture.
Vous allez à la fin. Démarrer la lecture vers l'arrière jusqu'à ce que vous atteignez n lignes. Puis tout lire à partir de là.
Quelque chose que vous pouvez faire très facilement en C# 4.0 (et avec juste un tout petit peu d'effort dans les versions antérieures) est d'utiliser les fichiers mappés en mémoire pour ce type d'opération. Idéal pour les gros fichiers que vous pouvez associer à seulement une partie du fichier, puis accéder à la mémoire virtuelle.
Il y a un un bon exemple ici.
Votre journal ont des lignes de longueur similaire? Si oui, alors vous pouvez calculer la moyenne de la longueur de la ligne, puis effectuez les opérations suivantes:
fichier mappé en mémoire est aussi une bonne méthode -- carte de la queue de fichier, de calculer des lignes, la carte du volume précédent, calculer les lignes etc. jusqu'à ce que vous obtenir le nombre de lignes nécessaires
Ce n'est en aucune façon optimale, mais rapide et sale vérifie avec de petits fichiers de log, j'ai été en utilisant quelque chose comme ceci: