你平时打开一件文件使用什么?

using (FileStream fs = new FileStream(file, FileMode.Open)?

using (FileStream fs = new FileStream(file, FileMode.Open,FileAccess.Read)?

using (FileStream fs = new FileStream(file, FileMode.Open,FileAccess.Read,FileShare.ReadWrite))?

.net System.IO.FileStream的构造函数中有:

 FileStream(string path, FileMode mode) : this(path, mode, (mode == FileMode.Append) ?
 FileAccess.Write : FileAccess.ReadWrite, FileShare.Read, ,

可见,FileShare的默认值是FileShare.Read

如果我们以FileShare.Read打开一个文件,如果这个文件在此之前已经被另一个FileStream open,而且没有Close(),一个System.IO.IOException 将会产生。

因此,如果仅仅读取文件,就使用   using (FileStream fs = new FileStream(file, FileMode.Open,FileAccess.Read,FileShare.ReadWrite)).

是不是这样就万无一失了呢?

因为有FileShare.None,FileShare.Delete的存在,所以答案是No.

如果文件以FileShare.None模式打开,则在此这后的所有的request,将出throw exception, even if only read. fortunately,this case is infrequence.

转载于:https://www.cnblogs.com/DataFlow/archive/2008/11/28/1343302.html

一起认识FileShare相关推荐

  1. FileStream 的FileShare一点小认识

    C#读写文本文件一般都是用StreamWriter来实现(读书的时候就这样用.毕业后这几年基本也是这样干的),通常代码例如以下: using (StreamWriter sw = new Stream ...

  2. FileShare —— 基于 Windows IOCP 无状态高并发Socket I/O 模型

    为尊重原作者,首先附上对我进步非常有用的链接 http://blog.csdn.net/piggyxp/article/details/6922277 这一次的小灵感,是因为要进行网络应用课程设计.所 ...

  3. 【C#】集合_哈希表_字典_泛型_文件

    数组能做到:存放同种类型数据,且数据个数确定 object类型的数组能满足:放各种类型的数据,确定放多少个,但是随意插入元素,数组做不到 集合能做到:存放各种数据类型,且不确定存放多少个,能做到随意插 ...

  4. C# 的三种序列化方法

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...

  5. CentOS中vsftp安装与配置

    1. 安装  使用chkconfig --list来查看是否装有vsftpd服务:  使用yum命令直接安装:yum -y install vsftpd  然后为它创建日志文件:touch /var/ ...

  6. 用C#去除代码的SourceSafe管理

    经常看一些的程序,有些一个解决方案带有多个项目,由于代码比较多,多人开发,所以好多vs.net下的工程是用source safe进行版本控制的.而用source safe进行版本控制需要局域网路径共享 ...

  7. C#实现对象的Xml格式序列化及反序列化

    要序列化的对象的类: [Serializable] public class Person { private string name; public string Name { get { retu ...

  8. 路径,文件,目录,I/O常见操作汇总

    摘要:    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案 ...

  9. 如何有效的使用C#读取文件

    你平时是怎么读取文件的?使用流读取.是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番),里面封装了几乎所有我们可以想到的和我们没有想到的类,流是读取文件的一般手段,那么你真的会用它读 ...

最新文章

  1. jQuery 技术揭秘
  2. php中mvc代表什么意思,php mvc是什么意思?
  3. 机器学习--Hoeffding Inequality--界定概率边界
  4. NVM安装与使用(实现Node多版本控制)
  5. 指定端口传输_高速数字传输链路测试 - 高速数字电路仿真设计与测试技术发展趋势综述(二)...
  6. php版本哪个没有面向对象,php面向对象的方法重载两种版本比较
  7. MySql4.1.7 + PHP5 + Apache2.0.52(win2003下测试通过)
  8. 怎样查看JVM的默认收集器
  9. git遇到的问题 .Git: There is no tracking information for the current branch.
  10. 关于Ajax的get与post浅分析,同步请求与异步请求,跨域请求;
  11. 方法级别的java日志输出控制(一)
  12. java读取excel图表模板,修改选值范围
  13. C语言乘法口诀表代码
  14. dell电脑无法修复此计算机,不重装系统将DELL戴尔电脑恢复到出厂状态教程
  15. 计算机将会代替老师吗英语范文,英文作文电脑对教育的重要意义
  16. 关于什么是物联网?没有比这篇文章更全的了
  17. 解锁电机气隙公差分析之奥秘!
  18. 通过ip获取地理位置
  19. 星露谷物语联机服务器位置已满,星露谷物语联机版
  20. linux gpu 风扇速度,如何在无头节点上调整NVIDIA GPU风扇速度?

热门文章

  1. 图的遍历DFS与BFS(邻接表)
  2. 抽象代数的抽象方法本质
  3. ajaxfileupload带参数上传文件
  4. 加入域时遇到“找不到网络路径”错误解决办法汇总
  5. [转]使用Ant进行ssh和scp操作
  6. Linux Shell常用技巧(三)
  7. android RxJava(RxAndroid)的简单使用
  8. android jni 返值
  9. Python时间库—datetime的详解及使用
  10. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ