2010-10-13 13 views
11

Angenommen, ich interessiere mich nur für den Umgang mit Textdateien, welche spezifischen Vorteile oder Nachteile bieten System.IO.File-Methoden im Vergleich zu StreamWriter?C# I/O - Unterschied zwischen System.IO.File und StreamWriter/StreamReader

Gibt es Leistungsfaktoren? Was ist der grundlegende Unterschied und welche davon sollte in welchen Fällen verwendet werden?

Noch eine Frage, wenn ich den Inhalt einer Datei in eine Zeichenfolge lesen und eine LINQ-Abfrage darüber ausführen soll, was ist das Beste?

+0

Datei und StreamWriter/Reader sind * kaum * sogar analog. Können Sie genauer sein, wie Aliostad gefordert hat, und festlegen, * welche * Methoden auf 'File' Sie vergleichen? –

Antwort

2

Welche Methode meinen Sie?

WriteAllLines() und WriteAllText zum Beispiel verwendet StreamWriter hinter der Szene. Hier ist der Reflektor Ausgang:

public static void WriteAllLines(string path, string[] contents, Encoding encoding) 
{ 
if (contents == null) 
    { 
     throw new ArgumentNullException("contents"); 
    } 
    using (StreamWriter writer = new StreamWriter(path, false, encoding)) 
    { 
     foreach (string str in contents) 
     { 
      writer.WriteLine(str); 
     } 
    } 
} 


public static void WriteAllText(string path, string contents, Encoding encoding) 
{ 
    using (StreamWriter writer = new StreamWriter(path, false, encoding)) 
    { 
     writer.Write(contents); 
    } 
} 
4

Im Allgemeinen ich mit System.IO.File über StreamReader gehen würde, als die ehemaligen meist eine bequeme Wrapper für die letztere ist. Sehen Sie den Code hinter File.OpenText:

public static StreamReader OpenText(string path) 
{ 
    if (path == null) 
    { 
     throw new ArgumentNullException("path"); 
    } 
    return new StreamReader(path); 
} 

Oder File.ReadAllLines:

private static string[] InternalReadAllLines(string path, Encoding encoding) 
{ 
    List<string> list = new List<string>(); 
    using (StreamReader reader = new StreamReader(path, encoding)) 
    { 
     string str; 
     while ((str = reader.ReadLine()) != null) 
     { 
      list.Add(str); 
     } 
    } 
    return list.ToArray(); 
} 

Sie können Reflektor verwenden einige andere Methoden zu überprüfen, wie Sie es ist ziemlich einfach sehen

Zum Lesen der Inhalte von die Datei, werfen Sie einen Blick auf:

12

hinter den scheinbar doppelten Methoden in der File-Klasse ein wenig interessanten Geschichte gibt. Es entstand nach einer Usability-Studie zu einer Vorabversion von .NET. Sie haben eine Gruppe erfahrener Programmierer gebeten, Code zu schreiben, um Dateien zu manipulieren. Sie waren zuvor .NET nicht ausgesetzt und hatten nur die Dokumente, von denen sie arbeiten konnten. Die Erfolgsquote betrug 0%.

Ja, es gibt einen Unterschied. Sie werden es herausfinden, wenn Sie versuchen, eine Datei mit einem Gigabyte oder mehr zu lesen. Das ist ein garantierter Absturz bei der 32-Bit-Version. Kein Problem mit einem StreamReader, der Zeile für Zeile liest, wird sehr wenig Speicher verbrauchen. Es hängt davon ab, was der Rest Ihres Programms tut, aber versuchen Sie, die Bequemlichkeitsmethode auf Dateien zu beschränken, die nicht größer als sagen wir ein paar Megabyte sind.

Verwandte Themen