Постоянное чтение в программу C# динамически изменяющихся данных из Excel (csv)
Тут представлен НЕ рабочий пример цикла для считывания каждые 6000 мс
List List = new List();
int otv = 1;
while (otv != 0)
{
using (StreamReader sr = new StreamReader("Input.csv"))
{
//цикл пока не достигли конца файла
while (sr.EndOfStream != true)
{
//помещаем строку из файла в строковый массив по разделителю, принятому в csv
string str = sr.ReadLine();
//помещаем в элемент списка новую структуру типа Znachenia
List.Add(new Znachenia() { Znachenie = Math.Abs(Convert.ToDouble(str)) });
}
sr.Close();
}
Thread.Sleep(6000);
}
foreach (Znachenia Dannie in List)
{
MessageBox.Show(Convert.ToString(Dannie)) ;
}
}
public struct Znachenia
{
public double Znachenie;
public override string ToString()
{
return Convert.ToString(Znachenie);
}
}
Ответы (1 шт):
для проверки изменений файловой системы оптимально использовать FileSystemWatcher https://stackoverflow.com/questions/15017506/using-filesystemwatcher-to-monitor-a-directory
Для считывания цсв я советую воспользоваться библиотеку из вижуал бейсика или враппер на нее https://ru.stackoverflow.com/questions/560133/Как-просто-работать-с-открыть-изменить-сохранить-excel-xlsx-csv-файлы/560134#560134
Что бы не считывать слишком часто - желательно делать это не чаще чем условных 3-4 секунды. Мало ли как там запись будет происходить. Если же наверняка контролированная и не слишком частая - то почему бы и не считывать вообще каждый раз как изменяется файловая система. Будь то раз на 2 секунды или раз на час.
Считывать данные лучше в бекграундном потоке. И когда они считались полностью(файл же может быть великоват), только тогда уже переносить их в необходимое место связанное с фронтендом.