Подтвердить что ты не робот

Читать только первую строку из текстового файла

так что я не могу этого сделать, MyFile.txt имеет либо "английский", "французский", либо "немецкий" в первой строке и я хочу получить язык из первой строки текстового файла, а затем продолжить мой код

String[] languages = new String[] { "english", "french", "german"};

foreach (String language in languages)
{
    string line1 = File.ReadLines("MyFile.txt").Skip(0).Take(1);
    line1 = language;
    continue;
}
4b9b3361

Ответ 1

Вы можете использовать File.ReadLines вместе с Enumerable.First. Это гарантирует вам только чтение первой строки из файла.

using System.Linq; 

...

string line1 = File.ReadLines("MyFile.txt").First(); // gets the first line from file.

Отличие от File.ReadAllLines состоит в том, что File.ReadLines использует ленивую оценку и не считывает сначала измененный файл в массив строк.

Редактировать: Linq также обеспечивает правильное удаление FileStream.

Ответ 2

Прокомментировать использование ReadAllLines() в комментарии OP ответа CSharpie; это может оказать огромное влияние на производительность, если MyFile.txt - очень большой файл.

File.ReadAllLines().First() фактически прочитает все строки, сохранит их в string[], а затем возьмет первый. Поэтому, если ваш файл очень большой, он сохранит все эти строки в массиве, что может занять некоторое время.

Альтернативным и лучшим вариантом будет просто открыть StreamReader и прочитать только первую строку. Правильная реализация будет:

String[] languages = new String[] { "english", "french", "german"};
string firstLine;

using(StreamReader reader = new StreamReader("MyFile.txt"))
{
    firstLine = reader.ReadLine() ?? "";
}

if(languages.Contains(firstLine))
{
    //...
}

Использование using позаботится о том, чтобы закрыть и удалить читателя. Кроме того, использование ?? гарантирует, что null никогда не возвращается (и, таким образом, сохраняет вас ArgumentNullException на Contains()).

Ответ 3

Хотя сообщение с 2014 года, более эффективное решение с использованием более позднего метода может быть следующим:

System.IO.StreamReader readingFile = new System.IO.StreamReader(filePath);

string readingLine = readingFile.ReadLine();

Таким образом, вы избегаете считывать несколько строк и должны получить первый с Linq.