有人能告诉我在文本文件中检查新行的最佳方法是什么? 我有一个比例,它将权重值写入文本文件。然后我的C#程序必须读出最后一个值并将其用于其他计算。 我会阅读文本的最后一行并在几秒后重复这一点,但这是一个糟糕的解决方案,因为如果我只能在将新值写入文件时读取最后一个值,而不是每隔几秒钟就会更好。 那么如何检查文件中的新行?我应该使用文件日期或文件大小吗?什么是最好的方式?希望有人可以提供帮助。
while (checkBox1.Checked)
{
//Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\";
/* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = @"Textdokument.txt";
watcher.Changed += new FileSystemEventHandler(OnChanged);
}
}
private void OnChanged(object source, FileSystemEventArgs e)
{
textBox1.Text = "1234";
if (e.ChangeType == WatcherChangeTypes.Changed)
{
string lastLine = File.ReadLines(e.FullPath).Last();
textBox1.Text = lastLine;
}
}
这是我的代码,直到现在。没有显示错误但仍然没有任何反应。 可能是问题是其他应用程序正在写入文件,而我想从中读取它?这应该不是问题,还是我错了?
答案 0 :(得分:3)
您可以使用FileSystemWatcher
当对系统大小进行更改时,将引发
Changed
事件 属性,上次写入时间,上次访问时间或安全权限 正在监视的目录中的文件或目录。
private static void OnChanged(object source, FileSystemEventArgs e)
{
if(e.ChangeType == WatcherChangeTypes.Changed)
{
string lastLine = File.ReadLines(e.FullPath).Last();
}
}
答案 1 :(得分:0)
您可以尝试计算文件的MD5哈希值,并与原始MD5哈希值进行比较,如果这两个匹配项不匹配,则会修改该文件。
然后使用下面的代码:仅读取最后一行
var lines = new ReverseLineReader(filename);
var last = lines.Take(1);