NET问答: 如何实现读写 file 的时候不用锁模式 ?

咨询区

  • Homam

我先说一下我的顾虑,是这样的,我有一个 windows service 服务在不断的写入日志,同时我还有个看板程序在不断的获取 windows service 程序写入的日志。

问题是:service 程序在写日志的时候会 lock 文件,看板程序在读取的时候也会 lock 文件,这就很尴尬了,经常遇到进程被占用的异常。

服务程序代码:


void WriteInLog(string logFilePath, data)
{File.AppendAllText(logFilePath, string.Format("{0} : {1}\r\n", DateTime.Now, data));
}

看板程序代码:

int index = 0;private void Form1_Load(object sender, EventArgs e){try{using (StreamReader sr = new StreamReader(logFilePath)){while (sr.Peek() >= 0)  // reading the old data{AddLineToGrid(sr.ReadLine());index++;}sr.Close();}timer1.Start();}catch (Exception ex){MessageBox.Show(ex.Message);}}private void timer1_Tick(object sender, EventArgs e){using (StreamReader sr = new StreamReader(logFilePath)){// skipping the old data, it has read in the Form1_Load event handlerfor (int i = 0; i < index ; i++) sr.ReadLine();while (sr.Peek() >= 0) // reading the live data if exists{string str = sr.ReadLine();if (str != null){AddLineToGrid(str);index++;}}sr.Close();}}

请问大家我该如何解决此问题?

回答区

  • Manfred

你的问题在于写入和读取都是以排他的方式进行,其实 FileStream 中是可以支持共享的方式进行读写的。

比如将 service 代码改造如下:


var outStream = new FileStream(logfileName, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);

看板程序改造如下:


var inStream = new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

用完的时候记得 Close 一下,对了, FileStream 实现了 IDisposable 接口,可以用 using 包一下,参考如下代码:


using(var outStream = ...)
{// using outStream here...
}

点评区

????,我特意看了下 FileStreamFileShare.ReadWrite 参数解释。

    [ComVisible(true)][Flags]public enum FileShare{None = 0,Read = 1,Write = 2,//// Summary://     Allows subsequent opening of the file for reading or writing. If this flag is//     not specified, any request to open the file for reading or writing (by this process//     or another process) will fail until the file is closed. However, even if this//     flag is specified, additional permissions might still be needed to access the//     file.ReadWrite = 3,Delete = 4,Inheritable = 16}

我去,原来还可以这样玩,对 FileStream 用的还不透彻,学习了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言基类型,C语言基本类型边界值

以int为例&#xff0c;不同电脑int位数不同&#xff0c;以64位电脑为例&#xff0c;int占4字节&#xff0c;及 4*8 32位bit&#xff0c;int 是带有符号的整形&#xff0c;所以第一位表示符号&#xff0c;则int边界值为 2^31 - 1。其他类型参考代码&#xff1a;#include #inclu…

久坐伤腰!这款德国3D美臀坐垫,分散身体压力,保护腰椎尾椎。

▲数据汪特别推荐点击上图进入玩酷屋一直听闻德国是一个「直肠子」国家他们的严谨、认真、一丝不苟让这个只有8000万人口的国家竟有2300多个享誉全球的名牌小到牙刷牙线&#xff0c;大到汽车「德国制造」已成为高品质的代名词德国品质到底是一种怎样的存在&#xff1f;德国人生…

C sharp实例:华盾武器门数据接收和解析

项目介绍&#xff1a;本实例主要是接收安检金属门的数据解析并显示到界面上&#xff0c;只做功能实现&#xff0c;不做界面美化硬件&#xff1a;金属门一个、网线一根、电脑主机&#xff0c;金属门网线可以直接接到电脑主机上开发环境&#xff1a;vs2017 系统&#xff1a;win10…

python 中文处理

python里面要处理中文&#xff0c;在模块首行加上以下&#xff1a;&#xff08;注意要写在第一行&#xff0c;各种注释和import前面&#xff09; #-*-coding:utf-8-*- 转载于:https://www.cnblogs.com/peterpanzsy/archive/2013/03/31/2992251.html

Nature封面:大团队日趋中庸,小团队更容易出颠覆性创新

全世界只有3.14 % 的人关注了数据与算法之美【导读】现代科学研究团队的规模越来越大&#xff0c;一般认为&#xff0c;大团队往往有着更充足的经费支持和多样化的研究人员&#xff0c;更有利于科学创新。但近日Nature发表封面文章&#xff0c;认为大团队往往因为失败代价太高而…

开源FastGithub

0 前言github网站访问慢或访问不了&#xff0c;相信很多人都会遇到过&#xff0c;解决方式大概有两种&#xff1a;一种是使用代理访问&#xff1b;另一种是使用ipaddress.com等域名解析网站查询域名的ip&#xff0c;然后在host文件增加ip与域名的映射。1 代理访问代理访问是在一…

linux 创建ll,两台linux建立GRE隧道

1.拓扑图&#xff1a; 备注&#xff1a;因为应用原因&#xff0c;需要在linux2上添加一个公网地址&#xff0c;并且在中间路由设备不受控制的情况下&#xff0c;Linux1能访问到linux2上面的公网地址。2.基本接口配置&#xff1a;linux1:192.168.10.1/24linux2:192.168.20.2/24R…

Exchange Server2010系列之十一:部署CAS+HT角色高可用性

Exchange Server 2010使用基于角色的管理模型。多角色服务器的安装及配置&#xff0c;我们在前面的文章中已经做过介绍。本案例中根据高可用性要求&#xff0c;我们需要把服务器角色部署在分开的服务器上面&#xff0c;并且实现CAS、HT、MBX角色的高可用。在此&#xff0c;我的…

用BenchmarkDotNet看Property

属性——Property&#xff0c;由get,set访问器组成&#xff0c;这是C#使用度比较高的类成员。今天分几组对比测试&#xff0c;来看一下使用Property的性能。被测试对象&#xff1a;public class MyClass {private string _myProperty1 DateTime.Now.ToString();public string …

盘点2019年最有钱的爸爸们

全世界只有3.14 % 的人关注了数据与算法之美纽约时间3月5日&#xff0c;又到了一年一度的大佬炫富时间了&#xff0c;福布斯发布第33期2019年度全球亿万富豪榜&#xff0c;全世界最有钱的人都在这了。第33期福布斯全球亿万富豪榜TOP20 ↓据统计&#xff0c;本次评选一共有2153位…

android拖拽 字体变形,字体变形的几种方法与技巧

原标题&#xff1a;字体变形的几种方法与技巧替换法是在统一形态的文字元素加入另类不同的图形元素或文字元素。 其本质是根据文字的内容意思&#xff0c;用某一形象替代字体的某个部分或某一笔画&#xff0c;这些形象或写实或夸张。将文字的局部替换&#xff0c;是文字的内涵外…

ML.NET Cookbook:(18)如何在文本数据上训练模型?

一般来说&#xff0c;所有的ML.NET学习器都希望这些特征是一个浮点向量。因此&#xff0c;如果您的一些数据不是一个float&#xff0c;您需要将其转换为float。如果我们想学习文本数据&#xff0c;我们需要从文本中“提取特征”。NLP&#xff08;自然语言处理&#xff09;的整个…

每日一笑 | 终于知道为什么胖了之后气质会垮了

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

android led闪烁功能,如何在Android应用层中制作一个LED指示灯效果

如何在Android应用层中制作一个LED指示灯效果发布时间&#xff1a;2020-12-08 16:12:59来源&#xff1a;亿速云阅读&#xff1a;86作者&#xff1a;Leah本篇文章给大家分享的是有关如何在Android应用层中制作一个LED指示灯效果&#xff0c;小编觉得挺实用的&#xff0c;因此分享…

人工智能时代,学好数学很重要!

随着科技的快速发展&#xff0c;人工智能的重要性日渐显现。而数学知识蕴含着处理智能问题的基本思想与方法&#xff0c;是理解复杂算法的必备要素。在机器学习工作流程中&#xff0c;数学与代码高度交织在一起&#xff0c;代码通常可以根据数学直观地构建&#xff0c;甚至会共…

android编译的错误日志,Android Studio:编译器错误输出窗口在哪里?

当我在Android Studio中“运行”我的项目时&#xff0c;在“消息”窗口中&#xff0c;我得到&#xff1a;Gradle:FAILURE: Build failed with an exception.* What went wrong:Execution failed for task :play01:compileDebug.> Compilation failed; see the compiler erro…

为什么选择ASP.NET Core

什么是.NET有一次小飞去面试&#xff0c;面试官上来就问了一个宏观的问题&#xff1a;“你觉得什么是.NET”&#xff1f;小飞的脑子嗡嗡的&#xff0c;支吾了半天&#xff0c;才吐了一些碎片化的词语&#xff1a;“跨平台、开源、微软…”虽然作为一个.NET人&#xff0c;但是小…

c++中的new_handler

原文地址&#xff1a;http://blog.csdn.net/wzq981264/article/details/673630 在过去或者传统的模式中&#xff0c;当operator new不能满足一个内存分配请求的时候&#xff0c;它会返回一个空指针&#xff0c;但是现在如果operator new不能满足一个内存分配请求的时候&#xf…

抢不到“猫抓杯”怎么办?这些女神更喜欢

▲数据汪特别推荐点击上图进入玩酷屋不久前才送走了西方情人节&#xff0c;男同胞们的第二个“送礼节”----女神节。这个令所有女生翘首、期待、憧憬、摩拳擦掌的日子&#xff0c;令所有男士小心翼翼、挑礼物到崩溃的日子&#xff0c;就要到了。小木作为妇女之友&#xff0c;听…

程序出Bug,一定是环境的锅!

现象前几天&#xff0c;一个客户反映说&#xff0c;他看到的数据顺序是乱的&#xff0c;不是按照日期倒排。但是在测试环境、预生产环境&#xff0c;都无法重现问题&#xff0c;即使使用相同的程序版本。定位查看代码&#xff0c;出问题的功能使用了第三方ORM框架&#xff0c;无…