Lecture d'un fichier ligne par ligne en C#

Je suis en train de lire des fichiers texte où chaque ligne doit être traité. Pour le moment je suis juste en utilisant un StreamReader, et puis à la lecture de chaque ligne individuellement.

Je me demande si il existe un moyen plus efficace (en termes de LoC et la lisibilité) pour ce faire à l'aide de LINQ sans compromettre l'efficacité opérationnelle. Les exemples que j'ai vu impliquer le chargement de tout le fichier en mémoire, puis de les traiter. Cependant dans ce cas, je ne crois pas que ce serait très efficace. Dans le premier exemple, les fichiers peuvent obtenir jusqu'à environ 50k, et dans le deuxième exemple, toutes les lignes du fichier doit être lu (les tailles sont généralement de < 10k).

On pourrait dire que, de nos jours, il n'a pas vraiment d'importance pour ces petits fichiers, mais je crois que sorte de l'approche conduit à l'inefficacité de code.

Premier exemple:

//Open file
using(var file = System.IO.File.OpenText(_LstFilename))
{
    //Read file
    while (!file.EndOfStream)
    {
        String line = file.ReadLine();

        //Ignore empty lines
        if (line.Length > 0)
        {
            //Create addon
            T addon = new T();
            addon.Load(line, _BaseDir);

            //Add to collection
            collection.Add(addon);
        }
    }
}

Deuxième exemple:

//Open file
using (var file = System.IO.File.OpenText(datFile))
{
    //Compile regexs
    Regex nameRegex = new Regex("IDENTIFY (.*)");

    while (!file.EndOfStream)
    {
        String line = file.ReadLine();

        //Check name
        Match m = nameRegex.Match(line);
        if (m.Success)
        {
            _Name = m.Groups[1].Value;

            //Remove me when other values are read
            break;
        }
    }
}
  • 50K n'est même pas assez grand pour le faire dans le tas d'objets volumineux. Streaming de sens que si vos fichiers sont dans le mégaoctet (ou plus) de la gamme, pas de kilo-octets.
InformationsquelleAutor Luca Spiller | 2009-08-13