2016-10-14 1 views

Antwort

7

sollten Sie in der Lage sein, Folgendes zu tun:

public List<string> Index(IFormFile file) 
{ 
    var result = string.Empty; 
    using (var reader = new StreamReader(file.OpenReadStream())) 
    { 
     result = reader.ReadToEnd(); 
    } 

    return string.IsNullOrEmpty(result) 
     ? null 
     : result.Split('\n').ToList(); 
} 

Die Abstraktion für die IFormFile hat eine .OpenReadStream Methode.

aktualisiert

Um eine Tonne von unerwünschten und potenziell großen Zuweisungen zu verhindern, sollten wir eine einzige Zeile zu einer Zeit und bauen unsere Liste aus jeder Zeile, der Art und Weise lesen. Zusätzlich könnten wir diese Logik in eine Erweiterungsmethode einkapseln. Die Index Aktion endet aussehen wie folgt aus:

public List<string> Index(IFormFile file) => file.ReadAsList(); 

Die entsprechende Erweiterungsmethode wie folgt aussieht:

public static List<string> ReadAsList(this IFormFile file) 
{ 
    var result = new List<string>(); 
    using (var reader = new StreamReader(file.OpenReadStream())) 
    { 
     while (reader.Peek() >= 0) 
      result.Add(reader.ReadLine()); 
    } 
    return result; 
} 

Ebenso können Sie eine async Version als auch haben:

public static async Task<List<string>> ReadAsListAsync(this IFormFile file) 
{ 
    var result = new List<string>(); 
    using (var reader = new StreamReader(file.OpenReadStream())) 
    { 
     while (reader.Peek() >= 0) 
      result.Add(await reader.ReadLineAsync()); 
    } 
    return result; 
} 

Sie dann könnte diese Version auf diese Weise verwenden:

public Task<List<string>> Index(IFormFile file) => file.ReadAsListAsync(); 
+0

Dies funktionierte, obwohl es Environment.NewLine nicht akzeptierte, also benutzte ich 'Split ('\ n')', etwas über das Verlangen nach einem Zeichen anstelle einer Zeichenkette. – BigOmega

+1

Warum würden Sie alles in eine einzelne Zeichenfolge dann Split dann lesen machen Sie eine Liste? Warum nicht einfach Zeile für Zeile lesen und zu einer Liste hinzufügen? Der obige Code ordnet eine potentiell riesige Zeichenfolge zu, um dann ein Array zuzuordnen, und weist dann eine Liste zu. – davidfowl

+0

Große Beobachtung. Ich habe einfach gezeigt, wie es geht, ich werde den Code aktualisieren - danke. –

Verwandte Themen