Прочитать 2 строки по 2 строки в текстовом файле

Предположим, что приведенный ниже метод ReadUser считывает имя пользователя и пароль из текстового файла. Проблема в том, что он не читает остальную часть текстового файла после прочтения первых двух строк. Как решить эту проблему?

* Редактировать: как прочитать первые 2 строки, а затем еще 2 строки в текстовом файле?

public override void ReadUser()
{
    user = base.UserID;
    password = base.Password;

    using (StreamReader sr = new StreamReader(File.Open("C:\\Users\\user\\Documents\\Projects\\AdministratorModule//userTextFile.txt", FileMode.Open)))
    {
        user1 = sr.ReadLine();
        password1 = sr.ReadLine();
        sr.Close();

        if (user == user1 && password == password1)
        {
            Console.WriteLine("Login Successfull");
        }
        else
        {
            Console.WriteLine("Login Failed");
        }
    }
}

вы закрываете StreamReader с помощью sr.Close(); после прочтения первых 2 строк

styx 01.05.2019 15:48

@styx, так что мне просто нужно удалить sr.Close (), тогда он продолжит чтение остальных строк в текстовом файле?

FatassBulky 01.05.2019 15:52

См.: Файл.ReadAllLines. Кстати, объявив StreamReader оператором using, вам не нужно закрывать этот поток. Он закрывается и утилизируется, как только вы покидаете блок using. Кроме того, это: File.Open("C:\\Users\\user\\Documents\\Projects\\Administrat‌​orModule//userTextFi‌​le.txt" — плохая идея. Используйте Application.StartupPath для доступа к каталогу, в котором находится исполняемый файл вашего приложения В настоящее время (его не будет там при развертывании).

Jimi 01.05.2019 15:57

Этот код будет читать только первые две строки, независимо от того, где вы вызываете Close(). Вы явно вызываете sr.ReadLine(); дважды, и все. Чтобы прочитать все строки из файла, вам нужно использовать цикл или метод, который читает все строки.

Patrick Tucci 01.05.2019 16:00

@Jimi, есть идеи, как использовать application.startupPath?

FatassBulky 02.05.2019 03:56
Application.StartupPath — это путь к вашему исполняемому файлу. Если вы используете профиль Debug, это [ProjectPath]\Bin\Debug. Если вы используете профиль Release[ProjectPath]\Bin\Release. Когда вы устанавливаете или иным образом развертываете свое приложение, это путь, по которому ваш исполняемый файл устанавливается/скопируется. Переместите туда свой файл. На данный момент. После этого вам нужно будет научиться добавлять файл в свой проект и использовать его свойства для выбора Copy to Output Directory. Вы можете выбрать Always или If Newer. Что лучше всего соответствует вашим потребностям.
Jimi 02.05.2019 04:07

Так, например, ваш путь к файлу может быть string myFilePath = Path.Combine(Application.StartupPath, "userTextFile.txt");. Path требует using System.IO;.

Jimi 02.05.2019 04:10

@Джими хорошо, спасибо, сэр!

FatassBulky 02.05.2019 04:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

простая базовая логика

int currentLine = 0;
//no need use close method with using
using (StreamReader sr = new StreamReader(File.Open("C:\\Users\\user\\Documents\\Projects\\AdministratorModule//userTextFile.txt", FileMode.Open)))
{
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        switch (++currentLine)
        {
            case 1: user1 = line; break;
            case 2: password1 = line; break;
            case 3: otherVariable = line; break;
            case 4: yetAnotherVariable = line; break;
            ......
        }
        //rest of your logic

    }
}

Однако, если по какой-то причине вам нужно сохранить все строки в массиве, вам лучше просто использовать Файл.ЧитатьВсеСтроки();

Любая идея о чтении 2 строк из текстового файла, а затем еще 2 строки в текстовом файле ?? * извините, новичок здесь

FatassBulky 02.05.2019 03:55

@FatassBulky, вы можете продолжить эту логику использования переменной i (i соответствует номеру строки, которую вы читаете)

styx 02.05.2019 07:43

@FatassBulky отредактировал мой ответ, чтобы вы лучше поняли

styx 02.05.2019 08:03

Другие вопросы по теме