1.将文件流变为共享:

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
StringBuilder sb = new StringBuilder();
while (!sr.EndOfStream)
sb.AppendLine(sr.ReadLine());

2.将文件进行锁,访问者依次等待

2.1方式:

public static ReaderWriterLockSlim logWriteLock = new ReaderWriterLockSlim();
public  void  WriterXML()
         logWriteLock.EnterWriteLock();
         //wait code....
      catch (Exception ex)
        Log.Error("Global.asax Fire Error:", ex.ToString());
     finally
       logWriteLock.ExitWriteLock();
2.2 可以使用lock(ojbect) 方式进行锁,全局锁需设计一个封装lock 的类 其主要触发的原因,文件正在被读写时,读写时间过大没有来得及关闭读写流,这时另一程序进行访问,文件被前一个程序独占1.将文件流变为共享:FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);StreamReader sr = new StreamReader(
C#实例 实现WMI连接目标,运行命令与查询状态并能打开对方SMB同时实现连接并完成文件传输一整套解决方案 附Log4Net日志 此实例完整演示了如何连接135RPC服务,即WMI服务,实现功能: 1、远程获取计算机信息 2、执行命令 3、重启电脑 4、打开进程 5、打开共享SMB 6、连接SMB并实现传输文件
  国内多位微软MVP联手翻译... 本书提供作译者介绍   Andrew Troelsen世界级c#专家,微软VisuaI C#MVP。他是著名的微软技术咨询企业Intertech的合伙人和副总裁,该公司的客户包括微软、霍尼韦尔、美国宇航局等。他曾为MSDN网站和MacTech网站撰写了有关各种操作系统平台上.NET技术的文章,并经常在业界主要技术会议上发表f演讲和开设技术讲座。除本书外,他还撰写了COM and Net interoperabity和Visual Basic NET and the NET Platform An Advanced Guide等十多部NET技术方面的著作 本书是c#领域久负盛名的经典著作,深入全面地叙述了c#编程语言和.net平台核心,并以大量示例剖析相关概念。书中介绍了c#的各种语言构造、.net 2.0的类、核心api、公共中间语言(cil)、动态程序集和asp.net扩展等内容;同时也介绍了.net 3.0和.net 3.5中新的编程api,包括wpf 、wcf和wf 的功能;另外,还介绍了最新的c# 3.0编程语言、linq编程技术、com与.net 的互操作性以及平台无关的.net开发。   本书由微软c# mvp andrew troelsen编写,历经多次修订,适合各层次.net开发人员阅读。 第一部分 c#和.net平台简介 第1章 net之道  1.1 net之前的世界  1.2 net解决方案  1.3 net平台构造块(clr、cts和cls)简介  1.4 其他支持.net的编程语言  1.5 net程序集概览  1.6 cts  1.7 cls  1.8 clr  1.9 程序集/命名空间/类型的区别  1.10 使用ildasm.exe探索程序集  1.11 使用lutz roeder的reflector来查看程序集  1.12 部署.net运行库  1.13 net的平台无关性  1.14 小结  第2章 构建c#应用程序  2.1 net framework 3.5 sdk的作用  2.2 用csc.exe构建c#应用程序  2.3 使用textpad构建.net应用程序  . 2.4 使用notepad++构建.net应用程序  2.5 使用sharpdevelop构建.net应用程序  2.6 使用visual c# 2008 express构建.net应用程序  2.7 使用visual studio 2008构建.net应用程序  2.8 其他.net开发工具  2.9 小结  第二部分 c#核心编程结构 第3章 c#核心编程结构ⅰ  3.1 一个简单的c#程序  3.2 有趣的题外话:system.environment类的其他成员  3.3 system.console类  3.4 系统数据类型和c#简化符号  3.5 system.string数据类型  3.6 窄化和宽化数据类型转换  3.7 c#迭代结构  3.8 条件结构和关系/相等运算符  3.9 小结  第4章 c#核心编程结构ⅱ  4.1 方法和参数修饰符  4.2 成员重载  4.3 c#中的数组操作  4.4 枚举类型  4.5 结构类型  4.6 值类型和引用类型  4.7 值类型和引用类型:最后的细节  4.8 c#可空类型  4.9 小结  第5章 定义封装的类类型  5.1 c#类类型  5.2 类构造函数  5.3 this关键字的作用  5.4 static关键字  5.5 定义oop的支柱  5.6 c#访问修饰符  5.7 第一个支柱:c#的封装支持  5.8 常量数据  5.9 只读字段  5.10 c#的分部类型  5.11 通过xml生成c#源代码的文档  5.12 查看劳动成果  5.13 小结  第6章 继承和多态  6.1 继承的基本机制  6.2 回顾visual studio类关系图  6.3 第二个支柱:继承  6.4 包含/委托编程  6.5 第三个支柱:c#的多态支持  6.6 基类/派生类的转换规则  6.7 超级父类:system.object  6.8 小结  第7章 结构化异常处理  7.1 错误、bug与异常  7.2 net异常处理的作用  7.3 最简单的例子  7.4 配置异常的状态  7.5 系统级异常(system.systemexception)  7.6 应用程序级异常(system.applicationexception)  7.7 处理多个异常  7.8 finally块  7.9 谁在引发什么异常 7.10 未处理异常的后果  7.11 使用visual studio调试未处理的异常  7.12 小结  第8章 对象的生命周期  8.1 类、对象和引用  8.2 对象生命周期的基础  8.3 应用程序根的作用  8.4 对象的代  8.5 system.gc类型  8.6 构建可终结对象  8.7 构建可处置对象  8.8 构建可终结类型和可处置类型  8.9 小结  第三部分 c#高级编程结构 第9章 接口  9.1 接口类型  9.2 定义自定义接口  9.3 实现接口  9.4 在对象级别调用接口成员  9.5 接口作为参数  9.6 接口作为返回值  9.7 接口类型数组  9.8 使用visual studio 2008实现接口  9.9 通过显式接口实现解决命名冲突  9.10 定义接口层次结构  9.11 构建可枚举类型(ienumerable和ienumerator)  9.12 构建可克隆的对象(icloneable)  9.13 构建可比较的对象(icomparable)  9.14 回调接口  9.15 小结  第10章 集合与泛型  10.1 system.collections命名空间的接口  10.2 system.collections命名空间的类类型  10.3 system.collections.specialized命名空间  10.4 装箱、拆箱以及和system.object的关系  10.5 类型安全和强类型集合问题  10.6 system.collections.generic命名空间  10.7 创建自定义泛型方法  10.8 创建泛型结构和类  10.9 创建自定义泛型集合  10.10 创建泛型基类  10.11 创建泛型接口  10.12 小结  第11章 委托、事件和lambda  11.1 net委托类型  11.2 使用c#定义委托  11.3 system.multicastdelegate与system.delegate基类  11.4 最简单的委托示例  11.5 使用委托改造car类型  11.6 更复杂的委托示例  11.7 委托协变  11.8 创建泛型委托  11.9 c#事件  11.10 泛型eventhandlert委托  11.11 c#匿名方法  11.12 方法组转换  11.13 c# 3.0 lambda运算符  11.14 小结  第12章 索引器、运算符和指针  12.1 索引器方法  12.2 运算符重载  12.3 自定义类型转换  12.4 指针类型  12.5 c#预处理指令  12.6 小结  第13章 c# 3.0的语言功能  13.1 隐式类型局部变量  13.2 自动属性  13.3 扩展方法  13.4 分部方法  13.5 对象初始化器  13.6 匿名类型  13.7 小结  第14章 linq  14.1 linq的作用  14.2 linq查询表达式初览  14.3 linq和泛型集合  14.4 linq和非泛型集合  14.5 查询运算符的内部表示  14.6 linq查询运算符  14.7 linq查询  14.8 小结  第四部分 使用.net程序集编程 第15章 .net程序集入门  15.1 定义自定义命名空间  15.2 .net程序集的作用  15.3 .net程序集的格式  15.4 构建和使用文件程序集  15.5 构建和使用文件程序集  15.6 私有程序集  15.7 共享程序集  15.8 使用共享程序集  15.9 配置共享程序集  15.10 gac的内部结构  15.11 发行者策略程序集  15.12 codebase元素  15.13 system.configuration命名空间  15.14 机器配置文件  15.15 小结  第16章 类型反射、晚期绑定和基于特性的编程  16.1 类型元数据的必要性  16.2 反射  16.3 构建自定义的元数据查看器  16.4 动态加载程序集  16.5 反射共享程序集  16.6 晚期绑定  16.7 特性编程 16.8 构建自定义特性  16.9 程序集级别(和模块级别)特性  16.10 使用早期绑定反射特性  16.11 使用晚期绑定反射特性  16.12 反射、晚期绑定和自定义特性的使用背景  16.13 构建可扩展的应用程序  16.14 小结  第17章 进程、应用程序域和对象上下文  17.1 回顾传统的win32进程  17.2 net平台下与进程进行交互  17.3 net应用程序域  17.4 对象上下文边界  17.5 进程、应用程序域和上下文小结  17.6 小结  第18章 构建多线程应用程序  18.1 进程、应用程序域、上下文及线程之间的关系  18.2 net委托的简短回顾  18.3 委托的异步性  18.4 异步调用方法  18.5 system.threading命名空间  18.6 system.threading.thread类  18.7 以编程方式创建次线程  18.8 并发问题  18.9 使用timer callback编程  18.10 clr线程池  18.11 backgroundworker组件的作用  18.12 小结  第19章 cil和动态程序集的作用  19.1 cil编程的本质  19.2 cil指令、特性和操作码  19.3 入栈和出栈:cil基于栈的本质  19.4 反向工程  19.5 cil指令和特性  19.6 net基类库、c#和cil数据类型的映射  19.7 在cil中定义成员  19.8 剖析cil操作码  19.9 使用cil构建.net程序集  19.10 动态程序集  19.11 小结  第五部分 .net基类库简介 第20章 文件输入输出和隔离存储  20.1 研究system.io命名空间  20.2 directory(info)和file(info)类型  20.3 使用directoryinfo类型  20.4 使用directory类型  20.5 使用driveinfo类类型  20.6 使用fileinfo类  20.7 使用file类型 533 20.8 stream抽象类 535 20.9 使用streamwriter和streamreader类型  20.10 使用stringwriter和stringreader  20.11 使用binarywriter和binaryreader  20.12 以编程方式“观察”文件  20.13 实现异步文件i/o操作  20.14 隔离存储的作用  20.15 代码访问安全入门  20.16 隔离存储概览  20.17 使用isolatedstoragefile获取存储  20.18 实战隔离存储:clickonce部署  20.19 小结  第21章 对象序列化 21.1 对象序列化  21.2 为序列化配置对象 21.3 选择序列化格式化程序  21.4 使用binaryformatter序列化对象 21.5 使用soapformatter序列化对象 21.6 使用xmlserializer序列化对象  21.7 序列化对象集合  21.8 自定义序列化过程  21.9 小结 第22章 ado.net之一:连接层 22.1 ado.net高层次定义 22.2 ado.net的数据提供程序 22.3 其他的ado.net命名空间  22.4 system.data命名空间的类型 22.5 使用接口抽象数据提供程序  22.6 创建autolot数据库  22.7 ado.net 数据提供程序工厂模型  22.8 ado.net的连接式访问  22.9 使用数据读取器  22.10 构建可重用的数据访问库 22.11 创建控制台ui前端  22.12 使用sqlcommand进行异步数据访问  22.13 数据库事务  22.14 小结  第23章 ado.net之二:断开连接层 23.1 ado.net断开连接层  23.2 dataset的作用  23.3 使用datacolumn  23.4 使用datarow  23.5 使用datatable  23.6 将datatable对象绑定到用户界面  23.7 使用数据适配器填充dataset/ datatable  23.8 重访autolotdal.dll  23.9 切换多表dataset对象  23.10 visual studio 2008的数据访问工具  23.11 从ui层解耦自动生成的代码  23.12 小结  第24章 linq api编程  24.1 linq to ado.net的作用  24.2 使用linq to dataset编程  24.3 使用linq to sql编程  24.4 使用sqlmetal.exe生成实体类  24.5 使用visual studio 2008建立实体类  24.6 使用linq to xml操作xml文档  24.7 在内存文档中导航  24.8 小结  第25章 wcf  25.1 各种分布式计算api  25.2 wcf的作用  25.3 wcf核心程序集  25.4 visual studio wcf项目模板  25.5 wcf应用程序的基本构成  25.6 wcf的abc  25.7 构建wcf服务  25.8 承载wcf服务  25.9 构建wcf客户端应用程序  25.10 使用wcf服务库项目模板  25.11 以windows服务承载wcf服务  25.12 异步调用服务  25.13 定义wcf数据契约  25.14 小结  第26章 wf  26.1 定义业务程  26.2 wf的构建块  26.3 wf程序集、命名空间和项  26.4 构建一个启用工作的简单应用  26.5 wf引擎承载代码  26.6 在工作中调用web服务  26.7 构建可重用的wf代码库  26.8 关于自定义活动的简要说明  26.9 小结  第六部分 桌面用户界面 第27章 windows forms编程  27.1 windows forms 命名空间  27.2 创建一个简单的windows forms 程序(不用ide)  27.3 visual studio windows forms项目模板  27.4 剖析form  27.5 响应鼠标活动  27.6 响应键盘活动  27.7 设计对话框  27.8 通过gdi+呈现图形数据  27.9 创建一个完整的windows forms应用程序  27.10 小结  第28章 wpf和xaml  28.1 wpf背后的动机  28.2 各种形式的wpf应用程序  28.3 wpf程序集  28.4 创建(不使用xaml的)wpf应用程序  28.5 application类型的其他细节  28.6 window类型的其他细节  28.7 构建(xaml相关的)wpf应用程序  28.8 将标记转换为.net程序集  28.9 使用代码隐藏文件实现的关注点的分离  28.10 xaml语法  28.11 使用visual studio 2008构建wpf应用程序  28.12 在运行时处理xaml:simplexaml- pad.exe  28.13 微软expression blend的作用  28.14 小结  第29章 使用wpf控件编程  29.1 wpf控件库概述  29.2 使用xaml声明控件  29.3 依赖属性的作用  29.4 路由事件  29.5 使用button类型  29.6 使用checkboxe和radiobutton  29.7 使用listbox和combobox类型  29.8 使用文本区  29.9 使用面板进行内容布局  29.10 使用嵌套面板创建窗口框架  29.11 wpf控件命令  29.12 wpf数据绑定模型  29.13 使用ivalueconverter进行数据转换  29.14 绑定到自定义对象  29.15 将ui元素绑定到xml文档  29.16 小结  第30章 wpf 2d图形呈现、资源和主题  30.1 wpf图形呈现服务  30.2 探究shape派生类  30.3 使用wpf画刷  30.4 使用wpf画笔  30.5 探究drawing派生类  30.6 ui变换的功能  30.7 wpf动画服务  30.8 wpf的资源体系  30.9 为wpf控件定义应用样式  30.10 使用模板改变控件的ui  30.11 小结  第七部分 使用asp.net构建web应用程序 第31章 构建asp.net网页  31.1 http的作用  31.2 web应用程序和web服务  31.3 html的作用  31.4 客户端脚本的作用  31.5 提交表单数据(get和post)  31.6 构建传统的asp页面  31.7 传统asp相关问题  31.8 asp.net命名空间  31.9 asp.net网页代码模型  31.10 asp.net站点目录结构细节  31.11 asp.net页面编译周期  31.12 页面类型的继承链  31.13 与传入的http请求交互  31.14 与输出http响应交互  31.15 asp.net网页的生命周期  31.16 web.config文件的作用  31.17 小结  第32章 asp.net web控件、主题和母版页  32.1 web控件的本质  32.2 system.web.ui.control类型  32.3 system.web.ui.webcontrols.webcontrol类型  32.4 asp.net web控件的类别  32.5 构建功能丰富的asp.net站点  32.6 验证控件的作用  32.7 使用主题  32.8 使用html表格布局控件  32.9 小结  第33章 asp.net状态管理技术  33.1 状态问题  33.2 asp.net状态管理技术  33.3 asp.net视图状态的作用  33.4 global.asax文件的作用  33.5 应用程序状态与会话状态差别  33.6 使用应用程序缓存  33.7 维护会话数据  33.8 cookie  33.9 sessionstate元素的作用  33.10 asp.net用户配置api  33.11 小结  第八部分 附录 附录a com与.net的互操作性  a.1 net互操作的研究范围  a.2 net调用com互操作的简单示例  a.3 net互操作程序集  a.4 运行库可调用包装  a.5 com idl的作用  a.6 使用类型库创建互操作程序集  a.7 创建一个更复杂的com服务  a.8 互操作程序集  a.9 在com中使用.net  a.10 ccw的作用  a.11 net类接口的作用  a.12 构建.net类型  a.13 生成类型库并注册.net类型  a.14 导出类型信息  a.15 创建一个visual basic 6.0的测试客户端  a.16 小结  附录b 使用mono进行平台无关的.net开发  b.1 net的平台无关性  b.2 获取和安装mono  b.3 mono开发工具  b.4 使用mono创建.net应用程序  b.5 推荐学习  b.6 小结 
自早期基于浏览器的 applet 和简单应用程序以来,Java 平台已有了巨大的发展。现在,我们有多个平台和概要及许多新的 API,并且还在制作的差不多有数百种之多。尽管 Java 语言的复杂程度在不断增加,但它对于日常的编程任务而言仍是一个出色的工具。虽然有时您会陷入那些日复一日的编程问题中,但偶尔您也能够回过头去,发现一个很棒的解决方案来处理您以前曾多次遇到过的问题。 就在前几天,我想要
C#中经常会使用到OpenFileDialog控件,而使用该控件时若没有将条件设置好,很容易出现以下提示: “文件由另一进程使用,该进程无法访问该文件”。 打开一个文件后,尝试重新打开一次该文件,或者打开该文件后想对该文件进行其他操作的时候,就容易出现这个错误提示,错误的原因很简单,解决方法也很简单。 一般情况下造成该错误的原因是构造System.IO.FileStream时参数设
c# 读写文件文件由另一进程使用,因此该进程无法访问该文件,在IO处理上遇到了无法操作的问题。 文件“D:\log.txt”由另一进程使用,因此该进程无法访问该文件。 log.txt是一个日志文件,不定时都可能由另外的程序对它进行日志记录写入操作。 今需要对日志文件读取出来,显示在日志查询里,需要用到了IO。 1、 FileStream fs = File.OpenRead(url...
错误原因:StreamWriter没有关闭 参考https://blog.csdn.net/bingtingabc/article/details/3280190有效关闭StreamWriter,记录一下 File.Create(filePath); using (StreamWriter sw = new StreamWriter(filePat...
FileStream fileStream = new FileStream(filePath, FileMode.Open,FileAccess.Read); int byteLength = (int)fileStream.Length; byte[] fileBytes = new byte[byteLength]; fileStream.Read(fileBytes, 0, byt...
这是由于程序要读取的文件已经被其他进程(人为或其它程序)打开,若仅需要读取,则可以设置文件共享方式为读写的,FileShare.ReadWrite,如下方式: System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open,System.IO.FileAccess.Read,FileShare.ReadWrite); 注意:System.IO.FileMode.Open,System.IO.FileAc
什么是Stream? Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java在将自己变的更高(Sha)级(Gua),更人性化。--------可以这么说lambda表达式其实就是实现SAM接口的语法糖。 Java8中,Collection新增了两个方法。分别是Stream()和parallelStream() Java8中添加了一个新的接口类Stream,相当于高 现代系统通过使控制发生突变来对这些情况作出反应。一般而言,我们把这些突变称为异常控制。 8.1异常 异常时异常控制的一种形式,它一部分是由硬件实现的,一部分是由操作系统实现的。说白了,异常就是控制的突变,用来响应处理器状态中的某些变化。下图为其基本思想 当前指令为:ICURR。 在处理器中,状态呗编... A程序不断的将日志信息追加到日志文件的末尾,B程序不断的从日志文件中读取最后一行(使用File.ReadLines(string path)方法)。 在B程序读取的同时A程序执行写入,报出如下错误信息: System.IO.IOException: 文件“xxx”由另一进程使用,因此该进程无法访问此文件解决方法 因为需要按行读取数据,所以采用File.ReadLines(string path)方法,但该方法在读取时会文件不让A程序继续写入。若不想禁止对文件的写入,应使用如下参数创建
Fileinfo类里的Create方法可以创建指定路径的文件,第一眼看上去还以为是void方法,其实它贴心地帮你创建了一个filestream作为返回值,要是没有妥善处理,那个stream就会一直在,直到后面试图读写的时候引发错误。 OpenFileDialog open_file = new OpenFileDialog(); open_file.Filter = "bat files (*.bat)|*.bat|All files (*.*)|*.*"; open_file.RestoreDir
C#中,进程间通信可以通过以下几种方式实现: 1. 管道通信(Named Pipes):管道是一种半双工的通信方式,可用于本地或网络通信。命名管道可供不同进程使用,以便它们可以相互通信。这种方式的缺点是只能在同一台计算机上使用。 2. 套接字通信(Socket):套接字是一种全双工的通信方式,可用于本地或网络通信。通过套接字可以实现不同进程之间的通信。这种方式的优点是可以在不同计算机之间进行通信,但需要考虑网络安全等问题。 3. 共享内存通信(Shared Memory):共享内存是指多个进程共享同一块内存区域,进程可以通过读取和写入这些内存来进行通信。这种方式的优点是速度很快,但需要考虑同步和共享内存的安全问题。 4. 消息队列通信(Message Queue):消息队列是指一个进程向队列发送消息,另一个进程从队列中接收消息。这种方式的优点是可以实现异步通信,但需要考虑消息的顺序和可靠性问题。 5. 远程过程调用(RPC):RPC是一种通信方式,可以让不同计算机上的进程之间相互调用。这种方式的优点是可以实现分布式计算,但需要考虑网络安全等问题。 以上是C#中常用的进程间通信方式,根据具体情况选择合适的方式进行通信。