小弟现在在做一个项目,项目组买了个传感器,它自带的软件能把数据直接存到txt里面。现在想在传感器存数据的同时,写个程序把txt里面的数据读出来。遇到了问题说,文件在另一个线程中被使用。想请问大家有没有什么办法?谢谢了!

解决方案 »

  1.   

    用两个文件
    或者读到内存中以后,关闭streamreader
    再streamwriter
      

  2.   


    这么用可不是办法,以文件做为数据交换中介,看看传感器的sdk吧,应该不用从文件读的;
      

  3.   

    传感器没有SDK之类的东西啊。很晕。
      

  4.   

    能不能写个程序先复制这个txt然后,读取这个复制的txt
      

  5.   

    对同一个文件,不能同时读写,这是一种保护。就是锁定。如果你想读取那个txt文件,就必须在其写操作完成后再去读。或者看看那个写的软件是否可以进行某些设定之类的。
      

  6.   

    不知道传感器在写文件的时候有没有开读权限出来只要有读权限,你就可以用下面的代码把文件装载到内存后慢慢处理,也不会影响到传感器的写操作
    [C# Code]
    Stream original = File.Open(Path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                byte[] filebyte = new byte[original.Length];
                original.Seek(0, SeekOrigin.Begin);
                original.Read(filebyte, 0, filebyte.Length);
                original.Close();
                original.Dispose();
     using (MemoryStream dbf = new MemoryStream(filebyte))
                {
    }
    [/C# Code]
      

  7.   

    高速去读写txt文件是不现实的
      

  8.   

    其实按说,文件写的时候应该是可读的。FileShare你试试,不过这个比较耗内存的,想对于普通的Stream。例子:(没编译,复制到自己那试试) FileStream fsw = new FileStream("C:\\shareFile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);       
                 
                Thread writeWorker = new Thread((ThreadStart)delegate 
                    {
                        while (true)
                        {
                            fsw.Seek(0,SeekOrigin.Begin);
                            byte[] writeBuffer = Encoding.UTF8.GetBytes(DateTime.UtcNow.ToString("hh:mm:ss")+Environment.NewLine);
                            fsw.Write(writeBuffer, 0, writeBuffer.Length);
                            fsw.Flush();
                            Thread.Sleep(1000);
                        }
                    });
               
                Thread readWorker = new Thread((ThreadStart)delegate 
                    {
                        while(true)
                        {   
                            FileStream fs = new FileStream("c:\\shareFile.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                            byte[] readBuffer = new byte[fs.Length];
                            fs.Read(readBuffer,0,readBuffer.Length);
                            Console.WriteLine(Encoding.UTF8.GetString(readBuffer));
                            Thread.Sleep(1000);
                        }
                    });
                writeWorker.Start();
                readWorker.Start();
                Console.ReadLine();
      

  9.   


    加上writeWorker 跟 readWorker的Close();我手残了,忘了写。
      

  10.   

    to:yf315918
    不要想尽办法去解决读txt文件的问题。
    传感器数据就那么几种数据传输的方法
    串口,GPRS(通过Socket)
    你去了解一下,他们是使用哪种方式传输的,然后自己去实现你需要的功能。
    然后这些数据都有自定义的格式,放到数据库中需要自己解下