C# Чтение построчно из файла в список
У меня проблема с чтением текста из файла построчно.
System.IO.StreamReader file = new System.IO.StreamReader("ais.txt");
while ((line = file.ReadLine()) != null)
{
listBox1.Items.Add(line);
}
Этот код читает только последнюю строку из файла и отображается в списке. Как я могу читать построчно?
Например: прочитать строку, подождать 1 секунду, прочитать другую строку, подождать 1 секунду... и т. Д.?
4 ответа
await
делает это очень легко Мы можем просто пройтись по всем линиям и await Task.Delay
для асинхронного ожидания в течение определенного периода времени, прежде чем продолжить, при этом все еще не блокируя поток пользовательского интерфейса.
public async Task DisplayLinesSlowly()
{
foreach (var line in File.ReadLines("ais.txt"))
{
listBox1.Items.Add(line);
await Task.Delay(1000);
}
}
Если вы хотите читать строки по одной с задержкой в одну секунду, вы можете добавить в форму таймер, чтобы сделать это (установите его на 1000):
System.IO.StreamReader file = new System.IO.StreamReader("ais.txt");
String line;
private void timer1_Tick(object sender, EventArgs e)
{
if ((line = file.ReadLine()) != null)
{
listBox1.Items.Add(line);
}
else
{
timer1.Enabled = false;
file.Close();
}
}
Вы также можете читать строки сразу и просто отображать их по одной, но я старался максимально приблизить их к вашему коду.
Вы пробовали File.ReadAllLines? Вы можете сделать что-то вроде этого:
string[] lines = File.ReadAllLines(path);
foreach(string line in lines)
{
listBox1.Items.Add(line);
}
Вы можете прочитать все строки и сохранить в строку массива
string[] file_lines = File.ReadAllLines("ais.txt");
а затем читать построчно нажатием кнопки или использовать таймер, чтобы подождать 1 секунду