怎么读取正在使用的文件
我的程序调用一个DLL, 这个DLL调用的时候会计算很长时间,计算的过程中会产生一个data.DAT文件, 并且不停的往里面写数据, 现在有个问题,就是让DLL产生data.DAT文件之后,我程序另一个地方再去读取它,并且去读取data.DAT里面的数据行数。 请问如何去实现。 最好有详细代码。谢谢PS:data.DAT文件是一直被DLL程序占用的。 --------------------编程问答-------------------- 自己去写程序吧。。。
dll打开文件时以写独占方式打开。。另外的程序以只读打开去读取。 --------------------编程问答--------------------
我的意思是是DLL计算的时候程序怎么去执行我的那个 获取data.DAT文件行数的 方法。 程序执行DLL的时候不是要等DLL执行完程序才跳出来么? 现在是这个问题, 要怎么去读取文件行数我会 --------------------编程问答-------------------- copy出来 --------------------编程问答-------------------- 有难度 --------------------编程问答-------------------- 我能像到的是,DLL在写文件时,是计算一段时间写一次,写完后立刻关闭流,下次写的时候再打开。
另一个程序则在DLL关闭流后开始读取一直到读取完或DLL又要写数据。
可能DLL与另一个程序需要互相进行通信已保证交替进行操作 --------------------编程问答--------------------
在线程中执行DLL --------------------编程问答--------------------
比如我获取文件行数的方法 叫 tim()
我DLL和tim()方法 都是用的线程, 只是两个都用线程的话,在刚开始执行tim()时DLL还没有产生data.DAT文件,那我tim()方法里面会报找不到data.DAT文件的错。 --------------------编程问答-------------------- 读的时候带读阻塞?不知道FileStream按行读的时候会不会阻塞。
如果不行,那就在线程里读一次,读不到就sleep,然后继续读。
写应该是一直打开的吧?
可以写代码试验一下。 --------------------编程问答-------------------- 直接按行读,或者一个字符一个字符的读。因为文件没写完,获取行数不准确的 --------------------编程问答--------------------
让DLL向tim通信,每次关闭流时通知tim,然后tim接收到通知后开始读取,在下一次dll写入时再次通知tim并等待tim反馈操作结束,然后开始再次写入。 --------------------编程问答-------------------- 用读写锁控制dll写文件的时候模式选择 FileShare.ReadWrite,这样当dll不写文件的时候可以允许其他程序读取
另外用内存映射倒是也可以,不过不能保证读文件的时候,写操作是不是正在修改文件
--------------------编程问答-------------------- 读取进程不就对了么LZ
--------------------编程问答--------------------
你这个方法可以行的通。
不过详细的能给点代码么,谢谢了 --------------------编程问答-------------------- 既然只有读的权限 ,就把文件copy出来一份至于命名规则由你自己定,当他读完时 再把文件删除掉
补充:.NET技术 , C#