Считывание строк .txt

78
06 июля 2021, 19:40

Мне нужен код, который бы считал строки в текстовом документе, а потом выводил в label (Не знаю, какие еще есть варианты для вывода, новичок) (В текстовом документе будет изменятся текст каждую секунду, было бы еще хорошо добавить какое-то обновление)

Answer 1

судя по

В текстовом документе будет изменятся текст каждую секунду

очень вероятно что ты пытаешся сделать что-то через пятую точку. По крайней мере на даную секунду это именно так и выглядит.

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

  • Допустим это и вправду нужно решать именно так.
  • Допустим что файл только для чтения должен открыватся.

Значит нужно сразу иметь ввиду:

  • отпадает работа с большими файлами. В текстовых файлах нельзя считывать изменившуюся часть. Так что прийдется работать исключительно со ВСЕМ файлом от начала до конца.

Предлагаю решение в виде проверки времени сохранения файла.

Если время записи файла не совпадает с последним прочитанным - считывать файл заново с пермишнами под чтение, что бы не мешать записи файла другой программой.

но я настоятелно рекомендую создать отдельный вопрос с описанием того что ты хочешь получить и узнать что, скорее всего, ты идешь по неоптимальному пути.

Answer 2

Необходимо добавить using System.Threading. Вместо TextBox, можно использовать Label.

private readonly ManualResetEvent _instanse = new ManualResetEvent(false); 
public Form1()
{
    InitializeComponent();
    //set the file for observation
    FileSystemWatcher watcher = new FileSystemWatcher("C:\\", "your_text_file.txt");
    watcher.NotifyFilter = NotifyFilters.LastWrite;
    watcher.EnableRaisingEvents = true;
    //subscribing on event of the FileSystemWatcher
    watcher.Changed += OnChanged;
}
private void button1_Click_1(object sender, EventArgs e)
{
    textBox1.Text = ChangeInFile();
} 
//reading text from file
private string ChangeInFile()
{
    using (StreamReader fin = new StreamReader(@"C:\your_text_file.txt"))
    {
        return fin.ReadToEnd();
    }
}
//everytime, when source file changed       
public void OnChanged(object source, FileSystemEventArgs e)
{
    try
    {
        _instanse.WaitOne(500);
        textBox1.Text = ChangeInFile();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message); // or simply return;
    }
}
Answer 3

Можно использовать richTextBox для вывода больших объемов текста.

Условие может быть любым, не обязательно должен быть цикл, в зависимости от того, сколько раз из файла нужно считывать информацию.

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

private void button1_Click(object sender, EventArgs e)
        {
            // Путь до файла
            string path = @"c:\temp\MyTest.txt";
            // Пока верно условие, информация будет считываться из файла
            for (int i = 0; i < 5; i++)
            {
                // Открытие файла для чтения, помещение содержимого в richTextBox
                richTextBox1.Text = File.ReadAllText(path);
            }            
        }
READ ALSO
Как правильно свзяать локальный узел (Tcp/Udp)Client&#39;a для принятия входящих данных?

Как правильно свзяать локальный узел (Tcp/Udp)Client'a для принятия входящих данных?

Когда я инициализирую TcpClient с указанием в конструкторе IPAddress отличного от 00

144
Последовательное использование lock()

Последовательное использование lock()

В моем случае нужно, чтоб процедуры P1,P2,P3 могли пересекаться между собой

100
Не получается обнулить текст в Input Field в Unity на C#

Не получается обнулить текст в Input Field в Unity на C#

У меня есть Input Field для ввода названия проекта, мне нужно, чтобы текст в нем обнулялся по нажатию на кнопку "Отмена"Подскажите, пожалуйста, решение...

94
Замена элементов массива с помощью linq

Замена элементов массива с помощью linq

Как с помощью linq заменить все элементы целочисленной последовательности, заданной с помощью EnumerableRange на сумму их цифр

121