同时对文本文件进行读写 小弟现在在做一个项目,项目组买了个传感器,它自带的软件能把数据直接存到txt里面。现在想在传感器存数据的同时,写个程序把txt里面的数据读出来。遇到了问题说,文件在另一个线程中被使用。想请问大家有没有什么办法?谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用两个文件或者读到内存中以后,关闭streamreader再streamwriter 这么用可不是办法,以文件做为数据交换中介,看看传感器的sdk吧,应该不用从文件读的; 传感器没有SDK之类的东西啊。很晕。 能不能写个程序先复制这个txt然后,读取这个复制的txt 对同一个文件,不能同时读写,这是一种保护。就是锁定。如果你想读取那个txt文件,就必须在其写操作完成后再去读。或者看看那个写的软件是否可以进行某些设定之类的。 不知道传感器在写文件的时候有没有开读权限出来只要有读权限,你就可以用下面的代码把文件装载到内存后慢慢处理,也不会影响到传感器的写操作[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] 高速去读写txt文件是不现实的 其实按说,文件写的时候应该是可读的。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(); 加上writeWorker 跟 readWorker的Close();我手残了,忘了写。 to:yf315918不要想尽办法去解决读txt文件的问题。传感器数据就那么几种数据传输的方法串口,GPRS(通过Socket)你去了解一下,他们是使用哪种方式传输的,然后自己去实现你需要的功能。然后这些数据都有自定义的格式,放到数据库中需要自己解下 如何在aspx文件内使用JS的属性. 关于线程问题和定时器 c# Crystal Report 如何设置SQL查询语句 求解一道循环题 Grid中选择事件 VS2005调试过程中遇到的问题 關于C#事件原理的請教! 100分求C#读取XML文件内容 FTP删除目录问题 asp.net中操作word总是出错,急,在线等 C#多国语言的问题,菜鸟求高手解答 c# 节点问题
或者读到内存中以后,关闭streamreader
再streamwriter
这么用可不是办法,以文件做为数据交换中介,看看传感器的sdk吧,应该不用从文件读的;
[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]
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();
加上writeWorker 跟 readWorker的Close();我手残了,忘了写。
不要想尽办法去解决读txt文件的问题。
传感器数据就那么几种数据传输的方法
串口,GPRS(通过Socket)
你去了解一下,他们是使用哪种方式传输的,然后自己去实现你需要的功能。
然后这些数据都有自定义的格式,放到数据库中需要自己解下