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:
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];