读文件时文件正由另一进程使用,因此该进程无法访问该文件
时间:2019-07-04
本文章向大家介绍读文件时文件正由另一进程使用,因此该进程无法访问该文件,主要包括读文件时文件正由另一进程使用,因此该进程无法访问该文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
场景:cs系统下产生的日志文件在登陆后需要在系统中读取例如错误日志并显示到系统中。
错误方式:
/// <summary> /// 根据导航地址加载内容 /// </summary> /// <param name="uri"></param> /// <returns></returns> protected override object LoadContent(Uri uri) { var sb = new StringBuilder(); var logPath = string.Format(@"{0}\{1}", _root, uri.ToString()); using (var fileStream = new FileStream(logPath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true)) { using (var streamReader = new StreamReader(fileStream, System.Text.Encoding.Default)) { while (streamReader.EndOfStream == false) { sb.AppendLine(streamReader.ReadLine()); } } return sb.ToString(); } }
错误原因:只读方式打开文件,因为其他文件可能正在往里写数据,所以要开启共享锁,如 FileShare.ReadWrite
正确:
/// <summary> /// 根据导航地址加载内容 /// </summary> /// <param name="uri"></param> /// <returns></returns> protected override object LoadContent(Uri uri) { var sb = new StringBuilder(); var logPath = string.Format(@"{0}\{1}", _root, uri.ToString()); using (var fileStream = new FileStream(logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, bufferSize: 4096, useAsync: true)) { using (var streamReader = new StreamReader(fileStream, System.Text.Encoding.Default)) { while (streamReader.EndOfStream==false) { sb.AppendLine(streamReader.ReadLine()); } } return sb.ToString(); } }
原文地址:https://www.cnblogs.com/wgx0428/p/11134431.html
- 知其所以然之永不遗忘的算法
- ZOOKEEPER集群搭建及测试
- 【Python环境】Scikit-Learn:开源的机器学习Python模块
- 【Python环境】可爱的 Python: 自然语言工具包入门
- 电脑静音工作,又听不到12306的来票音乐,纠结啊 !但春节前工作多任务重,不能安心工作,就动手做个“无声购票弹窗”工具吧!
- .net访问PostgreSQL数据库发生“找不到函数名”的问题追踪
- “领域驱动开发”实例之旅(1)--不一样的开发模式 一、分析业务需求。 二、设计领域对象模型 三、测试领域对象模型 四、设计业务处理类 五、设计Entity和Vi
- Java基础——左移和右移
- 【Python环境】利用 Python、SciKit 和文本分类来实现行为分析
- LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
- 判断两个单链表是否相交(有环、无环两种)
- 【数据科学家】SparkR:数据科学家的新利器
- KMP算法浅析
- Bug修复问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法