怎么读取正在使用的文件

yuyu46569 2011-09-09 03:14:33
我的程序调用一个DLL, 这个DLL调用的时候会计算很长时间,计算的过程中会产生一个data.DAT文件, 并且不停的往里面写数据, 现在有个问题,就是让DLL产生data.DAT文件之后,我程序另一个地方再去读取它,并且去读取data.DAT里面的数据行数。 请问如何去实现。 最好有详细代码。谢谢
PS:data.DAT文件是一直被DLL程序占用的。
...全文
162 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
longbin891012 2011-09-09
  • 打赏
  • 举报
回复
既然只有读的权限 ,就把文件copy出来一份至于命名规则由你自己定,当他读完时 再把文件删除掉
yuyu46569 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bunliney 的回复:]
引用 7 楼 yuyu46569 的回复:

引用 6 楼 bunliney 的回复:
引用 2 楼 yuyu46569 的回复:

引用 1 楼 wwlyqin 的回复:
自己去写程序吧。。。

dll打开文件时以写独占方式打开。。另外的程序以只读打开去读取。


我的意思是是DLL计算的时候程序怎么去执行我的那个 获取data.DAT文件行数的 方法。 程序执行DLL的时……
[/Quote]

你这个方法可以行的通。
不过详细的能给点代码么,谢谢了
萧炎 2011-09-09
  • 打赏
  • 举报
回复
读取进程不就对了么LZ
funxu 2011-09-09
  • 打赏
  • 举报
回复
用读写锁控制dll写文件的时候模式选择 FileShare.ReadWrite,这样当dll不写文件的时候可以允许其他程序读取
另外用内存映射倒是也可以,不过不能保证读文件的时候,写操作是不是正在修改文件
Bullatus 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yuyu46569 的回复:]

引用 6 楼 bunliney 的回复:
引用 2 楼 yuyu46569 的回复:

引用 1 楼 wwlyqin 的回复:
自己去写程序吧。。。

dll打开文件时以写独占方式打开。。另外的程序以只读打开去读取。


我的意思是是DLL计算的时候程序怎么去执行我的那个 获取data.DAT文件行数的 方法。 程序执行DLL的时候不是要等DLL执行完程序才跳出来么? 现在是这……
[/Quote]

让DLL向tim通信,每次关闭流时通知tim,然后tim接收到通知后开始读取,在下一次dll写入时再次通知tim并等待tim反馈操作结束,然后开始再次写入。
WillWang 2011-09-09
  • 打赏
  • 举报
回复
直接按行读,或者一个字符一个字符的读。因为文件没写完,获取行数不准确的
WillWang 2011-09-09
  • 打赏
  • 举报
回复
读的时候带读阻塞?不知道FileStream按行读的时候会不会阻塞。
如果不行,那就在线程里读一次,读不到就sleep,然后继续读。

写应该是一直打开的吧?

可以写代码试验一下。
yuyu46569 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bunliney 的回复:]
引用 2 楼 yuyu46569 的回复:

引用 1 楼 wwlyqin 的回复:
自己去写程序吧。。。

dll打开文件时以写独占方式打开。。另外的程序以只读打开去读取。


我的意思是是DLL计算的时候程序怎么去执行我的那个 获取data.DAT文件行数的 方法。 程序执行DLL的时候不是要等DLL执行完程序才跳出来么? 现在是这个问题, 要怎么去读取文件行数我会

在线……
[/Quote]

比如我获取文件行数的方法 叫 tim()
我DLL和tim()方法 都是用的线程, 只是两个都用线程的话,在刚开始执行tim()时DLL还没有产生data.DAT文件,那我tim()方法里面会报找不到data.DAT文件的错。
Bullatus 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yuyu46569 的回复:]

引用 1 楼 wwlyqin 的回复:
自己去写程序吧。。。

dll打开文件时以写独占方式打开。。另外的程序以只读打开去读取。


我的意思是是DLL计算的时候程序怎么去执行我的那个 获取data.DAT文件行数的 方法。 程序执行DLL的时候不是要等DLL执行完程序才跳出来么? 现在是这个问题, 要怎么去读取文件行数我会
[/Quote]
在线程中执行DLL
Bullatus 2011-09-09
  • 打赏
  • 举报
回复
我能像到的是,DLL在写文件时,是计算一段时间写一次,写完后立刻关闭流,下次写的时候再打开。
另一个程序则在DLL关闭流后开始读取一直到读取完或DLL又要写数据。

可能DLL与另一个程序需要互相进行通信已保证交替进行操作
火星大能猫 2011-09-09
  • 打赏
  • 举报
回复
有难度
libolei 2011-09-09
  • 打赏
  • 举报
回复
copy出来
yuyu46569 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwlyqin 的回复:]
自己去写程序吧。。。

dll打开文件时以写独占方式打开。。另外的程序以只读打开去读取。
[/Quote]

我的意思是是DLL计算的时候程序怎么去执行我的那个 获取data.DAT文件行数的 方法。 程序执行DLL的时候不是要等DLL执行完程序才跳出来么? 现在是这个问题, 要怎么去读取文件行数我会
WillWang 2011-09-09
  • 打赏
  • 举报
回复
自己去写程序吧。。。

dll打开文件时以写独占方式打开。。另外的程序以只读打开去读取。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧