C # Альтернативные способы загрузки текстового файла в метод? - PullRequest
0 голосов
/ 07 ноября 2019

Итак, я использую один и тот же код около года и обычно нахожу новые способы выполнять старые задачи и постепенно улучшать их, но мне кажется, что я просто застрял в этом. Мне было любопытно, если бы кто-нибудь мог дать какое-либо представление о том, как я буду выполнять эту задачу по-другому. Я загружаю текстовый файл, читаю все его строки в массив строк, а затем зацикливаю эти записи для выполнения операции над каждой строкой.

string[] config = File.ReadAllLines("Config.txt");

foreach (string line in config)
{
    DoOperations(line);
}

В конце концов я просто перейду к openfiledialog, ноэто на будущее, и использование OFG в консольном приложении, которое является многопоточным, кажется плохой практикой.

Ответы [ 2 ]

4 голосов
/ 07 ноября 2019

Поскольку вы не используете весь файл в любой момент, вы можете читать его по одной строке за раз. Учитывая, что ваш файл выглядит как конфигурация, он, вероятно, не является массивным файлом, но если вы пытаетесь прочитать большой файл с помощью File.ReadAllLines (), у вас могут возникнуть проблемы с памятью. Чтение одной строки за раз помогает избежать этого.

using (StreamReader file = new StreamReader("config.txt")){
    while((line = file.ReadLine()) != null)  
    {  
        DoOperations(line);  
    }
} 
3 голосов
/ 07 ноября 2019
  1. Вы можете переименовать config в lines для удобства чтения;)
  2. Вы можете использовать var

  3. Select? (если DoSomething что-то возвращает)

    var parsed = File.ReadAllLines("Config.txt").Select( l => Parsed(line));
    
  4. ForEeach?
    lines.ToList().ForEach( l => DoSomething(line));
    
  5. Читать строку за строкой с ReadLines ?

    foreach (var line in File.ReadLines("Config.txt"))
    {
     (...)
    }
    

    Методы ReadLines и ReadAllLines отличаются следующим образом: Когда вы используете ReadLines, вы можете начать перечислять коллекцию строк до того, как будет возвращена вся коллекция;когда вы используете ReadAllLines, вы должны подождать, пока весь массив строк будет возвращен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете с очень большими файлами, ReadLines могут быть более эффективными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...