Предположим, что приведенный ниже метод 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");
}
}
}
@styx, так что мне просто нужно удалить sr.Close (), тогда он продолжит чтение остальных строк в текстовом файле?
См.: Файл.ReadAllLines. Кстати, объявив StreamReader оператором using, вам не нужно закрывать этот поток. Он закрывается и утилизируется, как только вы покидаете блок using. Кроме того, это: File.Open("C:\\Users\\user\\Documents\\Projects\\AdministratorModule//userTextFile.txt" — плохая идея. Используйте Application.StartupPath для доступа к каталогу, в котором находится исполняемый файл вашего приложения В настоящее время (его не будет там при развертывании).
Этот код будет читать только первые две строки, независимо от того, где вы вызываете Close(). Вы явно вызываете sr.ReadLine(); дважды, и все. Чтобы прочитать все строки из файла, вам нужно использовать цикл или метод, который читает все строки.
@Jimi, есть идеи, как использовать application.startupPath?
Application.StartupPath — это путь к вашему исполняемому файлу. Если вы используете профиль Debug, это [ProjectPath]\Bin\Debug. Если вы используете профиль Release[ProjectPath]\Bin\Release. Когда вы устанавливаете или иным образом развертываете свое приложение, это путь, по которому ваш исполняемый файл устанавливается/скопируется. Переместите туда свой файл. На данный момент. После этого вам нужно будет научиться добавлять файл в свой проект и использовать его свойства для выбора Copy to Output Directory. Вы можете выбрать Always или If Newer. Что лучше всего соответствует вашим потребностям.
Так, например, ваш путь к файлу может быть string myFilePath = Path.Combine(Application.StartupPath, "userTextFile.txt");. Path требует using System.IO;.
@Джими хорошо, спасибо, сэр!





простая базовая логика
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, вы можете продолжить эту логику использования переменной i (i соответствует номеру строки, которую вы читаете)
@FatassBulky отредактировал мой ответ, чтобы вы лучше поняли
вы закрываете StreamReader с помощью sr.Close(); после прочтения первых 2 строк