69 Stimmen

Wie man am besten eine Datei in List<string> liest

Ich verwende eine Liste, um die Dateigröße zu begrenzen, da das Ziel eine begrenzte Festplatten- und Speicherkapazität hat. Dies ist, was ich jetzt tue, aber gibt es einen effizienteren Weg?

readonly List<string> LogList = new List<string>();
...
var logFile = File.ReadAllLines(LOG_PATH);
foreach (var s in logFile) LogList.Add(s);

5voto

Deleted Punkte 4568

Lagern Sie es nach Möglichkeit nicht. Lesen Sie sie einfach durch, wenn Sie nur wenig Speicherplatz zur Verfügung haben. Sie können einen StreamReader verwenden:

using (var reader = new StreamReader("file.txt"))
{
    var line = reader.ReadLine();
    // process line here
}

Dies kann in eine Methode verpackt werden, die Strings pro gelesener Zeile liefert, wenn Sie LINQ verwenden möchten.

4voto

User2325641 Punkte 41
//this is only good in .NET 4
//read your file:
List<string> ReadFile = File.ReadAllLines(@"C:\TEMP\FILE.TXT").ToList();

//manipulate data here
foreach(string line in ReadFile)
{
    //do something here
}

//write back to your file:
File.WriteAllLines(@"C:\TEMP\FILE2.TXT", ReadFile);

1voto

List<string> lines = new List<string>();
 using (var sr = new StreamReader("file.txt"))
 {
      while (sr.Peek() >= 0)
          lines.Add(sr.ReadLine());
 }

Ich würde folgendes vorschlagen... die Antwort von Groo.

0voto

vSteve Punkte 63
string inLine = reader.ReadToEnd();
myList = inLine.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();

Ich verwende auch Environment.NewLine.toCharArray, habe aber festgestellt, dass dies bei einigen Dateien, die mit \r\n. Probieren Sie eines von beiden aus, und ich hoffe, dass es bei Ihnen gut funktioniert.

0voto

RTZ ZZ Punkte 1
string inLine = reader.ReadToEnd();
myList = inLine.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();

Diese Antwort geht an der ursprünglichen Frage vorbei, die darin bestand, dass ein OutOfMemory-Fehler auftrat. Wenn Sie mit der obigen Version fortfahren, werden Sie mit Sicherheit darauf stoßen, wenn Ihr System nicht über den entsprechenden KONTIGUELL verfügbaren Speicher verfügt, um die Datei zu laden.

Sie müssen sie einfach in Teile zerlegen und entweder als Liste oder als String[] speichern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X