(C#) 如何以非独占方式打开文件

来源:百度知道 编辑:UC知道 时间:2024/06/29 20:20:54
从txt文件中读取数据,使用StreamReader,然后使用File.OpenText()打开txt文件,但是因为我写的程序在读数据时,那个txt有另一个程序在往里写,所以,如果我读到的那一行,正好是另一程序在进行些操作的那个地方,那么另一程序就会被强制关掉。分析问题可能是我以独占方式打开了那个文件,所以才导致冲突。如何能解决这个问题呢?如何以非独占方式打开文件呢?

注:此txt文件已经被改为read only,但还是会有如上问题

如果以非独占方式打开文件,假设多个人读写文件,就会有并发情况出现,即后面写入的数据复盖前面写的数据。

我是这么处理的:
先用共享方式打开文件,读取要修改的数据,在保存前再打开txt文件用你最新数据替换旧的数据。然后保存,这个动作必须在保存方法内完成。
比如:txt文件内有a,b,c3个数据,我要修改数据b为bbb,先读取txt文件取出b,
保存时再打开txt文件将b替换为bbb,写入文件。

你会问:为什么要这么做呢?ok,你在修改的同时如果有人将a修改为aaa,而你保存前读取的是a,b,c,你保存后是a,bbb,c,那你就复盖别人的数据了。
明白吗? 记得保存前读取->修改->保存,在一瞬间完成!

FileStream objFileStream = new FileStream(fileName, FileMode.Append, FileAccess.Write,FileShare.None);

FileShare.None 标识是独占,你打开了该文件其他任何人都打开不了。但是其他人先打开那么你用这个方式是打不开的!

FileStream s = new FileStream(fileName,FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite);

用Stream