Как читать файл построчно и печатать в текстовое поле c # - PullRequest
0 голосов
/ 04 января 2019

Я работаю с приложением Windows Forms и хочу взять текстовый файл с моего локального компьютера, чтобы приложение прочитало текстовый файл и отобразило каждую строку текста из файла в текстовое поле приложения.Я хочу нажать кнопку в форме и отобразить первую строку текстового файла, затем снова нажать кнопку и отобразить вторую строку и т. Д. Я искал способы сделать это и обнаружил, что StreamReader будетВероятно, лучше всего достичь того, чего я хочу достичь.

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

private void btnOpen_Click(object sender, EventArgs e)
{
    string file_name = "G:\\project\\testFile.txt";
    string textLine = "";

    if (System.IO.File.Exists(file_name) == true)
    {
        System.IO.StreamReader objReader;
        objReader = new System.IO.StreamReader(file_name);

        do
        {
            textLine = textLine + objReader.ReadLine() + "\r\n";
        } while (objReader.Peek() != -1);

        objReader.Close();
    }
    else
    {
        MessageBox.Show("No such file " + file_name);
    }

    textBox1.Text = textLine;
}

Ответы [ 4 ]

0 голосов
/ 04 января 2019

Вы можете прочитать текстовый файл построчно следующим образом:

public int buttonClickCounter = 0;
private void button1_Click_1(object sender, EventArgs e)
{   
   List<string> fileContentList = new List<string>();
   string fileInfo = "";
   StreamReader reader = new StreamReader("C://Users//Rehan Shah//Desktop//Text1.txt");
   while ((fileInfo = reader.ReadLine()) != null)
   {
      fileContentList.Add(fileInfo);
   }

   try
   {
      listBox1.Items.Add(fileContentList[buttonClickCounter]);
      buttonClickCounter++;
   }
   catch (Exception ex)
   {
      MessageBox.Show("All Contents is added to the file.");
   }
}
0 голосов
/ 04 января 2019

Я бы сделал это следующим образом:

вы работаете с Windows Forms, поэтому у вас есть класс Form в качестве основного класса.

В этом классе я бы определил:

private string[] _fileLines;
private string _pathFile;
private int _index = 0;

и в конструкторе я бы сделал

_fileLines = File.ReadAllLines(_pathFile);

, а в обработчике события нажатия кнопки я бы сделал:

textBox1.Text = _fileLines[_index++];
0 голосов
/ 04 января 2019

Дано

private string[] lines;
private int index =0;

Событие клика

// fancy way of intializing the lines array
lines = lines ?? File.ReadAllLines("somePath");

// sanity check 
if(index < lines.Length)
   TextBox.Text = lines[index++]; // index++ increments after use

Дополнительные ресурсы

Метод File.ReadAllLines

Открывает текстовый файл, считывает все строки файла в массив строк и затем закрывает файл.

??Оператор (C # Reference)

Оператор называется оператором нуль-слияния.Возвращает левый операнд, если операнд не равен нулю;в противном случае он возвращает правый операнд.

++ Оператор (C # Reference)

Унарный оператор приращения ++ увеличивает свой операнд на 1Поддерживается в двух формах: оператор приращения постфикса, x ++, и оператор приращения префикса, ++ x.

Обновление

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

Вы можете просто использовать локальную переменную длястрок, и просто читать файл каждый раз

var lines = File.ReadAllLines("somePath");
if(index < lines.Length)
   TextBox.Text = lines[index++];
0 голосов
/ 04 января 2019

textLine = textLine + objReader.ReadLine() + "\r\n";

заменить на приведенный ниже код

textLine = textLine + objReader.ReadLine() + Environment.NewLine;

...