请教:filestream读一个正在被使用的文本是否安全?
我用filestream读一个文件,这个文件同时正在被另外的程序读写(间断的,不是一直在读写)。用了下面的语句
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
然后用seek方法从指定位置开始读取文本,最后调用fs.Dispose();
这样是否安全?自己测试了一下,没有出问题,但还是想请各位前辈指点。
多谢。 --------------------编程问答-------------------- 没有出问题是因为没有碰到问题,这种非独占模式很容易造成数据不一致的问题,导致你或者他人保存的数据丢失 --------------------编程问答-------------------- 应该不行,这样不能保证数据的完整性和一致性 --------------------编程问答--------------------
这话经典! --------------------编程问答-------------------- 如果你只以控制同时只有一个人在读写
例如:
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#