Lire la dernière ligne du fichier texte

J’ai besoin de savoir lire la dernière ligne d’un fichier texte. J’ai besoin de trouver la ligne et de la traiter ensuite dans une firebase database SQL … J’ai lu et parcouru le Web, mais je me bats pour trouver la bonne façon de procéder. C’est à dire:

  1. Trouver la dernière ligne du fichier.
  2. Traite la dernière ligne du fichier.

J’espère que cela a du sens.

Il y a deux manières: simple et inefficace, ou horriblement compliquée mais efficace. La version compliquée suppose un codage sain.

À moins que votre fichier ne soit si gros que vous ne puissiez vraiment pas vous permettre de tout lire, je voudrais simplement utiliser:

var lastLine = File.ReadLines("file.txt").Last(); 

Notez que cela utilise File.ReadLines , pas File.ReadAllLines . Si vous utilisez .NET 3.5 ou une version antérieure, vous devez utiliser File.ReadAllLines ou écrire votre propre code – ReadAllLines lit le fichier entier en mémoire en une fois, tandis que ReadLines diffuse en ReadLines .

Sinon, la méthode la plus compliquée consiste à utiliser un code similaire à celui-ci . Il essaie de lire à partir de la fin du fichier, en manipulant des caractères méchants tels que les caractères multi-octets UTF-8. Ce n’est pas agréable

Je voudrais simplement combiner File.ReadLines(path) et Enumerable.Last :

 Ssortingng last = File.ReadLines(@"C:\file.txt").Last(); 

Il diffuse les lignes et ne charge pas tout en mémoire sous la forme File.ReadAllLines .

Première partie:

 File.ReadAllLines(@"c:\some\path\file.txt").Last(); 

ou

 File.ReadLines(@"c:\some\path\file.txt").Last(); 

ReadLines est préféré.

 ssortingng m = ""; StreamReader r = new StreamReader("file_path"); while (r.EndOfStream == false) { m = r.ReadLine(); } Console.WriteLine("{0}\n", m); r.Close(); 

Pour des performances optimales, même pour des fichiers de taille petite ou moyenne, je vous suggère de lire à l’envers jusqu’à ce que vous trouviez un caractère \ n, puis de tout lire après ce caractère \ n. Indépendamment de la page de code, il est probable que \ n représente toujours une nouvelle ligne.

Si vous surveillez plusieurs fichiers à la fois et utilisez quelque chose comme un FileSystemWatcher en C #, ce gain de performances sera très important.

Code C # …
(pas de vérification d’erreur, ne gère pas les cas dans lesquels deux nouvelles lignes ont été ajoutées depuis la dernière vérification ou une ligne est en cours d’écriture):

 public static ssortingng ReadLastLine(ssortingng path) { Stream fs = File.OpenRead(path); byte b; fs.Position = fs.Length; while (fs.Position > 0) { fs.Position--; b = (byte)fs.ReadByte(); if (b == '\n') { break; } fs.Position--; } byte[] bytes = new byte[fs.Length - fs.Position]; fs.Read(bytes, 0, bytes.Length); fs.Close(); return Encoding.UTF8.GetSsortingng(bytes); } 
 ssortingng last = File.ReadLines(@"C:\file.txt").Last(); ssortingng lastsymbol = last[last.Count - 1];