访问一个局域网共享文件问题

a1002890625 2018-01-23 11:04:54
各位好,

小弟最近在做共享文件访问相关的工作,通过客户机访问局域网上一个共享文件,该共享文件是通过共享内存的方式在实时更新,另外此文件在创建的时候就已经固定了大小,更新的时候只是更新里面的内容。
现在读取的情况是,通过C#编程,打开文件,再进行读取,第一次读正常,再去读取的时候,却读到上一次读取的内容(此时共享文件已经有更新);更是奇怪的是,如果我用File.Copy()拷贝一次共享文件到本地,读的文件还是网络共享文件,但此时一切都正常了,这样的结果让我无法解释啊,请问有没有了解这方面的大神,还望指教!
下面是用到的方法:

m_id_fs = new FileStream(“xxx ”, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

readLen = m_id_fs.Read(id_buff, 0, n);
...全文
530 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
老兵新唱 2018-01-24
  • 打赏
  • 举报
回复
同意版主看法,读文件前flush下缓冲区。
a1002890625 2018-01-23
  • 打赏
  • 举报
回复
@ xomix 谢谢,我使用网络映射磁盘的方式试过,还是一样的效果
  • 打赏
  • 举报
回复
FileShare 方式本来就不保证你都取得是真实的数据啊。如果要保证是准确的,那么要禁止 Share。
  • 打赏
  • 举报
回复
会,是的,建议使用映射网络硬盘,调用cmd执行几个命令就可以,还包括可以清除的命令。 http://bbs.csdn.net/topics/390219481
a1002890625 2018-01-23
  • 打赏
  • 举报
回复
另外我这边只要一开始做一次文件拷贝的操作,数据读就正常了,也能获取到共享文件的实时数据了
a1002890625 2018-01-23
  • 打赏
  • 举报
回复
可是通过本地这样读取操作是没有问题的,改成网络的就出问题
xuzuning 2018-01-23
  • 打赏
  • 举报
回复
既然是 读到上一次读取的内容,那显然是对共享文件的更改尚未作用到实体文件 你在修改文件的代码中,应显式的推出缓冲区,以使更改生效,或则是间隔走够长的时间后在进行读取操作
a1002890625 2018-01-23
  • 打赏
  • 举报
回复
不知道会不会是在使用File.Copy()函数拷贝的时候,建立了共享文件与本机的某种对应关系
a1002890625 2018-01-23
  • 打赏
  • 举报
回复
有没有了解这方面的朋友呢
秋的红果实 2018-01-23
  • 打赏
  • 举报
回复
检查下更新是怎么实现的,以及更新是由服务器做还是其他客户端做,会不会是更新后没有及时保存,读取到的是未保存前的旧数据 毕竟数据从内从写入磁盘需要时间
wanghui0380 2018-01-23
  • 打赏
  • 举报
回复
如果服务器端是net写的,让服务器端去flush强制刷入数据,如果是C++写的也应该让他强制去刷入数据(c++的也经常去讨论 cint<xx<cout和print的区别,他们区别也是是否强行刷数据到输出端)
a1002890625 2018-01-23
  • 打赏
  • 举报
回复
这个问题都纠结两三天了
a1002890625 2018-01-23
  • 打赏
  • 举报
回复
@ 以专业开发人员为伍 你好,我这边不能禁止share,因为对方一直要写文件

110,536

社区成员

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

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

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