当前位置:编程学习 > C#/ASP.NET >>

请教:filestream读一个正在被使用的文本是否安全?

我用filestream读一个文件,这个文件同时正在被另外的程序读写(间断的,不是一直在读写)。
用了下面的语句
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

然后用seek方法从指定位置开始读取文本,最后调用fs.Dispose();


这样是否安全?自己测试了一下,没有出问题,但还是想请各位前辈指点。
多谢。 --------------------编程问答-------------------- 没有出问题是因为没有碰到问题,这种非独占模式很容易造成数据不一致的问题,导致你或者他人保存的数据丢失 --------------------编程问答-------------------- 应该不行,这样不能保证数据的完整性和一致性 --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
没有出问题是因为没有碰到问题,这种非独占模式很容易造成数据不一致的问题,导致你或者他人保存的数据丢失

这话经典! --------------------编程问答-------------------- 如果你只以控制同时只有一个人在读写
例如:
application.lock() unlock()
的两个法。。
一个时间只能让一个用户更改里边的值 --------------------编程问答-------------------- 楼主既然想到来问了,说明楼主还是知道是有问题的 --------------------编程问答-------------------- 数据不准确,应该通过锁机制确定使用 --------------------编程问答-------------------- 那我要读文件中的内容,有什么办法??

如果filestream不行,那这个函数应该怎么用?


public FileStream(
string path,
FileMode mode,
FileAccess access,
FileShare share
)
 

参数
path
类型:System..::.String

当前 FileStream 对象将封装的文件的相对路径或绝对路径。

mode
类型:System.IO..::.FileMode

FileMode 常数,确定如何打开或创建文件。

access
类型:System.IO..::.FileAccess

FileAccess 常数,它确定 FileStream 对象访问文件的方式。这将获取 FileStream 对象的 CanRead 和 CanWrite 属性。如果 path 指定磁盘文件,则 CanSeek 为 true。

share
类型:System.IO..::.FileShare

FileShare 常数,确定文件如何由进程共享。

此构造函数被授予对文件的读/写访问权限,并且以共享“读”访问的模式打开(即此进程或另一进程打开文件进行写入的请求将失败,直到 FileStream 对象已关闭;但读尝试将成功)。缓冲区大小设置为默认大小 8192 字节 (8 KB)。 --------------------编程问答-------------------- 我把我问题的背景在说清楚点。

有一个程序A在计算,每到一定的程度会向log文件写文本。我自己编一个程序B想实时读取文本内容。就是A写什么,B就读什么。
如果用streamreader的话,由于A已经打开了log文本,所以无法使用。

我看了filestream类,好象有这种share读的功能,试了试发现可以实现。就像楼上几位所说,我也感觉这个好像有点问题。

lock unlock我再看看,我学机械的,本科学过一点C。是不是我的问题很低级?多谢各位的指导,我再试试看。 --------------------编程问答-------------------- 如果用filestream.lock()的话,只是锁定文本中的一个区域。
我现在读的这个文本,他只是不断地追加内容到末尾,锁定了好像没有意义啊。 --------------------编程问答-------------------- 如果B程序只是读数据的话应该没有问题吧,因为只有A在写LOG文件,这样应该不会有数据不一致的情况出现!! --------------------编程问答-------------------- 如果只有A写入,  B只是做读取操作,那么就不会有问题。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,