一个txt文件,每隔一秒有一行新的数据会写入。
我现在要做的就是监控这个txt文档,在有新的数据生成后,将它读取。
要问的问题就是,怎样在新的数据写入之后,能尽快发现,然后将这个数据(也就是txt文件的最后一行)读取。
新手提问,希望能得到帮助,思路或者代码都欢迎啊!多谢大家了!

解决方案 »

  1.   

    应该可以通过获取txt文件的最后修改时间来判断文件是否被修改过,若修改过则读取
      

  2.   

    stream读取,判断文件字节长度。
      

  3.   

    “每隔一秒有一行新的数据会写入”,数据既然能写入到txt,完全可以发送到你的应用程序里,这样处理更直观!!!
      

  4.   

    要么如4楼。
    要么建立文件夹,通过System.IO.FileSystemWatcher监控这个文件夹
    反正你这种处理思路本身就有问题,“每隔一秒有一行新的数据会写入”,多么频繁的IO操作
    你这样还要考虑你读的时候是不是程序正在写txt,也就是访问竞争
      

  5.   

    用FileSystemWatcher类监视指定文件FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = 指定目录;
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite;        watcher.Filter = "文件名.txt";watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.Created += new FileSystemEventHandler(OnChanged);
    watcher.Deleted += new FileSystemEventHandler(OnChanged);
    watcher.Renamed += new RenamedEventHandler(OnRenamed);
      

  6.   

    提醒下
    如果txt数据量太大的话(例如 上百MB),会打不开的,很消耗资源,机器会出现假死状态。
      

  7.   

    搞不懂,即然每秒一行,为什么要用TXT,就是用MDB也好点啊
      

  8.   

                             float dataLengthToRead=0;               
    FileStream fs = new FileStream(fbd.FileName, FileMode.Open);
                        StreamReader sr = new StreamReader(fs);
                       while (true)
                        {
                            DateTime dt1 = DateTime.Now; // 获取当前时间
                                DateTime dt2;
                            double diff = 0;                         while (diff < 1)//一秒执行一次
                             {
                                dt2 = DateTime.Now;
                                TimeSpan ts = dt2.Subtract(dt1);
                                diff = (double)ts.TotalSeconds;
                                Application.DoEvents();
                            }
                          if (dataLengthToRead > fs.length)
                            {
                              Console.WriteLine(sr.ReadToEnd());
                               dataLengthToRead=fs.Length;
                            }
    }              
        fs.Close();
        sr.Close();
      

  9.   

    //每次记录txt总行数。和下次新的写入txt总行数相减然后取差这就是新增的数据。
      

  10.   

    完美解决,读取新行,时间间隔为5秒钟读一次。
            private void GetNewTxt(string filename)
            {
                    long bytcount = 0;
                    while (true)
                    {
                       
                        FileStream fs = new FileStream(filename, FileMode.Open,FileAccess.Read);
                        byte[] bytcontent = new byte[fs.Length];
                        if (fs.CanRead)
                        {
                            StreamReader sr = new StreamReader(fs);
                            long dataLengthToRead = fs.Length;//获取新的文件总大小                        if (dataLengthToRead > 0 && dataLengthToRead > bytcount)
                            {
                                fs.Seek(bytcount, SeekOrigin.Begin);
                                int lengthRead = fs.Read(bytcontent, 0, Convert.ToInt32(dataLengthToRead - bytcount));//读取的大小
                                richTextBox1.AppendText(System.Text.Encoding.Default.GetString(bytcontent));//载入文本
                                dataLengthToRead -= lengthRead;
                            }
                            
                            sr.Close();
                            fs.Close();
                            DateTime dtstart = DateTime.Now; // 获取当前时间
                            DateTime dtend;
                            double diff = 0;
                            while (diff < 5)//一秒执行一次
                            {
                                dtend = DateTime.Now;
                                TimeSpan ts = dtend.Subtract(dtstart);
                                diff = (double)ts.TotalSeconds;
                                Application.DoEvents();
                            }
                          
                        }
                        bytcount = bytcontent.Length;//记录当次总字节数
                    }
            }
      

  11.   

    好多天没法上网,先感谢各位的回帖。
    说明下,每秒钟产生一行数据,这部分工作是由仪器设备写入txt文件的,我能做的就是从txt文件里面读取新加入的数据,然后计算处理。
    另外文件的数据量并不大,一天的总数据量存放到一个txt文件里面,也就几百K。
      

  12.   


    多谢你的建议,不过写文件的权限不在我这边,我只能读这个txt文件,再处理这个数据。
      

  13.   

    不太明白为什么要存到TXT里,TXT如果过大的话,读取会相当耗费时间和资源。。
    为什么不弄到数据库里?即然是每秒一条条的,干脆在数据库里弄吧,时间什么的也好处理!