Ich bin neugierig, warum das folgende Stück Code mit einer System.IO.IOException fehlschlägt, sagen, dass der Prozess nicht zugreifen kann die Datei, weil sie von einem anderen Prozess verwendet wird.Lesen von Dateien in Linq SelectMany() löst System.IO.IOException, wenn ohne ToList ausgeführt()
class Program
{
static void Main(string[] args)
{
const string filename = "tmp.txt";
File.AppendAllText(filename, "x");
var output = Enumerable.Range(0, 10).SelectMany(_ => File.ReadAllLines(filename));
File.WriteAllLines(filename, output);
}
}
Durch einfache ein ToList()
am Ende der Linq Pipeline zu werfen, vermeide ich dieses Problem, aber ich habe nicht in der Lage gewesen, um herauszufinden, warum dies der Fall ist.
müssen Sie zuerst eine Datei im Dateisystem erstellen, schreiben Sie Daten darauf und müssen dann von dort lesen. –
'.ToList()' sowie '.ToArray()' * materialisiert * das Ergebnis: Sie haben eine Sammlung im Speicher und keine Datei geöffnet; * Linq * ist faul: Wenn Sie nicht '.ToList()' haben; 'output' startet nur mit' WriteAllLines' (wenn Linq * * lesen muss) und Sie haben einen Konflikt: 'File.WriteAllLines' will ** schreiben ** während' var output = .. 'sollte ** lesen ** –