C#文件操作(二)

一、前言

文章的续作前文是:

C#文件操作(一)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_71897293/article/details/135117922?spm=1001.2014.3001.5501

二、流

        流是序列化设备的抽象表示序列化设备可以线性方式储存数据并可按照同样的方式访问一次访问一个字节此设备可以是磁盘文件网络通道内存位置或其他支持以现行方式读取的对象把设备变成抽象的就可以隐藏流的底层目标和元 (书上对于流的介绍)

1 FileStream 

        FileStream类提供了很多对文件读写的方法,需要注意FileStream是对字节和字节数组操作而StreamWriter和StreamRead则是对字符数据操作,这是二者不同的地方。主要是对文件的读写操作。

1.1读取文件

举个例子:

 //储存数据的字节数组byte[] bytes = new byte[1024];System.IO.FileStream fileStream = new System.IO.FileStream("Log.txt", System.IO.FileMode.OpenOrCreate);//将指针移到文件的开始位置的第七个字节处fileStream.Seek(0, System.IO.SeekOrigin.Begin);//读取方法 Read  参数第一个:读取到的数据写入的字节数组  第二个:在字节数组中的第几个字节处放置读取的数据 //第三个:指定读取的字节数//注意:如果要更改读取放置的位置那么字节长度也要相应减少 不然会报错fileStream.Read(bytes,10, bytes.Length-10);//将读取的字节数组通过 Encoding转码得到一个字符串 输出出来System.Console.WriteLine(System.Text.Encoding.UTF8.GetString(bytes));System.Console.ReadKey();

提示:1 FileStream有多个重载版本其中使用最多的是两个参数或三个参数的构造器。 

System.IO.FileStream fileStream2= new System.IO.FileStream
("Log.txt", System.IO.FileMode.OpenOrCreate,System.IO.FileAccess.Read);

注意:

        其中FileMode指定了如何打开或创建文件,FileAccess指定了流的作用 ,都是枚举类型,其中如果FileAccess 指定了流的作用是读取文件那么如果你实际是写入文件那么将会抛出异常。

1.2 写入文件

 举个例子:

  try{//将要写入的信息转换为字节数组byte[] bytes = System.Text.Encoding.UTF8.GetBytes("写入文件的信息");//指定对文件进行OpenOrCreate 操作 流是进行写入操作System.IO.FileStream fileStream = new System.IO.FileStream("Log.txt", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);//将指针移动指文件结束位置 的第0个位置写入fileStream.Seek(0, System.IO.SeekOrigin.End);//写入fileStream.Write(bytes, 0, bytes.Length);}catch (System.Exception ex){System.Console.WriteLine(ex.Message);System.Console.ReadKey();}

注意:

        文件类似的操作是很容易由各种原因引发异常,我们在对文件操作时应当使用Try语句。对异常进行处理和预防。 

2 StreamWriter

        StreamWriter前面提到了是对字符数据进行操作。如果不需要将指针指向文件何处位置那么使用此类是很简单的。

2.1 创建StreamWriter 对象

第一种:

 FileStream fileStream = new FileStream("Log.txt", FileMode.Open, FileAccess.Read);StreamWriter writer = new StreamWriter(fileStream);

提示:可以在已经有了FileStream对象时可以这么创建 

第二种:

StreamWriter writer = new StreamWriter("Log.txt",false);

示例解释:

        两个参数,第二个参数是设置是否对文件进行追加,True则是在文件结束处追加在后面,False则是重头写入,或者新建一个文件写入。 

2.2 写入文件

举个例子:

 System.IO.FileStream fileStream = new System.IO.FileStream("Log.txt", FileMode.OpenOrCreate);System.IO.StreamWriter writer = new System.IO.StreamWriter(fileStream);writer.WriteLine("信息1");writer.Write("信息2");writer.Write("信息3");writer.Write("信息4");writer.Write("信息5");writer.Close();

效果:

3 StreamRead

        StreamRead前面也提到了也是对字符数据进行操作。它一样有两种创建的方式和StreamWriter类似。

3.1 读取文件

举个例子:

   System.IO.FileStream fileStream = new System.IO.FileStream("Log.txt", System.IO.FileMode.OpenOrCreate);System.IO.StreamReader writer = new System.IO.StreamReader(fileStream);int charcode=default;while (charcode!=-1){Console.Write(Convert.ToChar(charcode));charcode = writer.Read();}writer.Close();//还有读取方法writer.ReadLine(); 与 writer.ReadToEnd();Console.ReadKey();

 提示:除了当前使用的方法还有ReadLine 和ReadToEnd方法。效果与直译效果一样。

4 异步文件访问

         当我们读取较大的文件时我们需要花费一点时间但我们不能让我们的主线程卡在读取从而无法正常与用户交互。其中我们上面使用的方法带有Async修饰的即代表异步读取,不会堵住我们的线程。

5 读写压缩文件

两个压缩流类举个例子:

封装的保存方法

 static void SaveCompressedFile(string filename, string data){FileStream fileStream =new FileStream(filename, FileMode.Create, FileAccess.Write);GZipStream compressionStream =  new GZipStream(fileStream, CompressionMode.Compress);StreamWriter writer = new StreamWriter(compressionStream);writer.Write(data);writer.Close();}

封装的读取方法

 static string LoadCompressedFile(string filename){FileStream fileStream =new FileStream(filename, FileMode.Open, FileAccess.Read);GZipStream compressionStream =new GZipStream(fileStream, CompressionMode.Decompress);StreamReader reader = new StreamReader(compressionStream);string data = reader.ReadToEnd();reader.Close();return data;}

使用方式:

  static void Main(string[] args){SaveCompressedFile("log.txt", "写入的数据");var str = LoadCompressedFile("log.txt");Console.WriteLine(str);Console.ReadKey();}

        需要注意当前的保存文件是对数据进行了压缩不是改为压缩包。书上提到的压缩比例是80:1。我们只需要了解如何使用就可以了

三、监控文件

        FileSystemWatcher类有一个公共无参的构造函数创建该对象实例后可以通过属性 EnableRaisingEvents为true的时候则代表开始监控 Path属性代表监控文件的路径 Filter代表监控哪种文件格式 *.*代表所有文件。NotifyFilter属性代表要监控的类型 我们可以使用二元OR运算符 来合并这些枚举值。

举个例子:

 watcher.NotifyFilter = NotifyFilters.LastWrite |NotifyFilters.FileName | NotifyFilters.Size;

注意: watcher 是FileSystemWatcher的实例

可以给当前类型创建多个处理事件。

 watcher.Deleted += (s, e) => { };watcher.Renamed += (s, e) =>{ };watcher.Changed += (s, e) => { };watcher.Created += (s, e) => { };

示例解释:分别创建了删除触发的世界更改触发的事件新建触发的事件重命名触发的事件  

本章学习完结 

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

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

相关文章

力扣题目学习笔记(OC + Swift)17. 电话号码的字母组合

17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 关键字:所有组合 模式识别&#xff1a…

Amazon Toolkit — CodeWhisperer 使用

tFragment--> 官网:https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 最近学习了亚马逊云科技的 代码工具,感慨颇多。下面是安装 和使用的分享。 CodeWhisperer,亚马逊推出的实时 AI 编程助手,是一项基于机器学习…

6. 行为模式 - 观察者模式

亦称: 事件订阅者、监听者、Event-Subscriber、Listener、Observer 意图 观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 问题 假如你有两种类型的对象: ​ 顾…

使用Python将OSS文件免费下载到本地:第四步 将ECS中文件下载到本地

大家好,我是水滴~~ 本文将介绍了使用的知识点、以及将ECS中文件下载到本地的代码、并对该代码进行详细解析、最后给出部署方案,希望能对你有所帮助! 《Python入门核心技术》专栏总目录・点这里 系列文章 使用Python将OSS文件免费下载到本地…

使用Open3D实现3D激光雷达可视化:以自动驾驶的2DKITTI深度框架为例(上篇)

原创 | 文 BFT机器人 3DLiDAR传感器(或)三维光探测和测距是一种先进的发光仪器,能够像我们人类一样在三维空间中感知现实世界。这项技术特别彻底改变了地球观测、环境监测、侦察和现在的自动驾驶领域,它提供准确和详细数据的能力…

Asp.Net Core 项目中常见中间件调用顺序

常用的 AspNetCore 项目中间件有这些,调用顺序如下图所示: 最后的 Endpoint 就是最终生成响应的中间件。 Configure调用如下: public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseD…

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘,具有超过 100 种服务和多语言翻译的集成。 快速:网站在构建时以静态方式生成,加载时间飞快。安全:所有对后…

基于阿里云平台帮助出海企业应对DDoS攻击

在出海浪潮下,越来越多企业选择出海。但海外市场也并非一片红利。由于海外千差万别的法律政策、摸不清的网络脉络。在业务快速扩展的同时,也势必会迎来“网络恶势力”DDoS攻击。海外更是DDoS攻击的重灾区,根据外部报道,白俄国安委…

VScode版本太低导致安装插件时报错:Unable to install ‘ms-vscoderemote-server‘ extension

VS code安装插件时报错:Unable to install ‘ms-vscoderemote-server’ extension because it is not compatible with the current version of VS Code (version 1.421) 是因为VS code 版本太低的原因,可以更新Vscode即可:点击help&#x…

C语言——内存函数的使用与模拟实现

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing 原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位…

RPC(5):AJAX跨域请求处理

接上一篇RPC&#xff08;4&#xff09;&#xff1a;HttpClient实现RPC之POST请求进行修改。 1 修改客户端项目 1.1 修改maven文件 修改后配置文件如下&#xff1a; <dependencyManagement><dependencies><dependency><groupId>org.springframework.b…

数据分析师的职业规划与参考资料

数据分析师如何规划 参考&#xff1a;超详细的数据分析职业规划 一个产品的出现可以从业务和技术两个方向分析&#xff0c;业务需求技术支持产品的出现。 如果把职业也当成一个产品&#xff0c;也有类似的分析&#xff0c; 其中业务也就是领域&#xff0c;即这个业务领域的特点…

mac电脑m1 arm架构安装虚拟机教程

1、准备一台虚拟机&#xff0c;安装CentOS7 常用的虚拟化软件有两种&#xff1a; VirtualBoxVMware 这里我们使用VirtualBox来安装虚拟机&#xff0c;下载地址&#xff1a;Downloads – Oracle VM VirtualBox 001 点击安装 002 报错&#xff1a;he installer has detected an…

【Python】基于ORM的SqlAlchemy操纵数据库代码实现

说明 ORM&#xff0c;全称Object-Relational Mapping&#xff0c;即对象-关系映射&#xff0c;是一种程序设计技术&#xff0c;用于在面向对象编程语言和关系数据库之间建立对应关系。它的主要目的是让开发者能够使用面向对象的方式操作数据库&#xff0c;而不必过多地关注数据…

【 USRP安装教程】MATLAB 2023B

步骤 matlabdocusrp驱动包 doc 安装包内容列表 双击“R2023b_Doc_Windows.iso” 打开cmd 查看盘符 切换盘符 因为是F盘&#xff0c;所以cmd输入&#xff1a;“F:” F:进入可安装界面 cd F:\bin\win64安装离线文档库 .\mpm install-doc --matlabroot"C:\MATLAB\R202…

idea 如何使用 JaCoCo 跑覆盖率

背景介绍 什么代码覆盖&#xff1f; 代码覆盖(Code coverage)是软件测试中的一种度量&#xff0c;描述程序中源代码被测试的比例和程度&#xff0c;所得比例称为代码覆盖率。简单来理解&#xff0c;就是单元测试中代码执行量与代码总量之间的比率。 Java常用的单元测试覆盖率…

kafka offset sasl加密连接

kafka-tool&#xff08;offset&#xff09; 进行SCRAM连接&#xff0c;直接上图 填写jaas的认证&#xff08;账密 引用包&#xff09;

Python tkinter控件全集之组合选择框 ttk.ComboBox

Tkinter标准库 Tkinter是Python的标准GUI库&#xff0c;也是最常用的Python GUI库之一&#xff0c;提供了丰富的组件和功能&#xff0c;包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等&#xff0c;方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…

使用Gitee中的CI/CD来完成代码的自动部署与发布(使用内网穿透把本地电脑当作服务器使用)

&#x1f4da;目录 &#x1f4da;简介:⚙️ 所需工具&#xff1a;&#x1f4a8;内网穿透配置&#x1f4ad;工具介绍✨命令安装&#x1f38a;配置Cpolar&#x1f573;️关闭防火墙&#x1f95b;防火墙端口放行规则&#xff08;关闭防火墙可以忽略&#xff09;&#x1f36c;小章总…

Windows系统下的可用RADIUS软件-[资源]

RADIUS协议相关原理介绍&#xff0c;可参考博客RADIUS协议原理介绍报文分析配置指导-RFC2865/RFC2866。 本文用于提供和介绍Window系统下几种可用的RADIUS软件。主要涉及软件有radius_ping&#xff08;绿色免安装版&#xff09;和WinRadius&#xff08;绿色免安装版&#xff09…