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.mzph.cn/news/237660.shtml

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

相关文章

IgH调试注意事项

1,不要在虚拟机测试,否则IgH无法收发数据包 现象:虚拟机中运行IgH master并绑定网卡后,主站由ORPHANED状态转换成IDLE状态,但无法收发数据报。 这是因为虚拟机用的是虚拟网卡,需通过iptables将数据包到转…

【前端基础】script引入资源脚本加载失败解决方案(重新加载获取备用资源)

问题描述 现在假设有一个script资源加载失败&#xff0c;代码如下 <!DOCTYPE html> <html> <head><title>script 资源加载失败</title> </head> <body><script src"http:hdh.sdas.asdas/1.js"></script> &l…

openGuass:极简版安装

目录 一、openGauss简介 二、初始化安装环境 1.创建安装用户 2.修改文件句柄设置 ​3.修改SEM内核参数 4.关闭防火墙 6.禁用SELINUX 7.安装依赖软件 8.重启服务器 三、安装数据库 1.下载安装包 2.创建安装目录 3.解压安装包 4.执行安装 5.验证安装 四、gsql工具…

【大数据存储与处理】第一次作业

hbase 启动步骤 1、启动 hadoop&#xff0c;master 虚拟机&#xff0c;切换 root 用户&#xff0c;输入终端命令&#xff1a;start-all.sh 2、启动 zookeeper&#xff0c;分别在 master、slave1、slave2 虚拟机终端命令执行&#xff1a;zkServer.sh start 3、启动 hbase&#x…

Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)

文章目录 Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)1、正确的运行页面2、报错404问题分类解决2.1、Tomcat未配置环境变量2.2、IIs访问权限问题2.3、端口占用问题2.4、文件缺少问题解决办法&#xff1a; Tomcat报404问题解决方案大全(包括tomcat可以正常运…

04-JVM字节码文件结构深度剖析

一、源代码 package com.tuling.jvm;public class TulingByteCode {private String userName;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;} }二、通过javap -verbose TulingByteCode .class反编译 //…

【Spring Security】打造安全无忧的Web应用--进阶篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.导入相关配置 1.pom 2.ym…

【sgDragUploadFolder】自定义组件:自定义拖拽文件夹上传组件,支持上传单个或多个文件/文件夹,右下角上传托盘出现(后续更新...)

特性&#xff1a; 支持在拖拽上传单个文件、多个文件、单个文件夹、多个文件夹可自定义headers可自定义过滤上传格式可自定义上传API接口支持显示/隐藏右下角上传队列托盘 sgDragUploadFolder源码 <template><div :class"$options.name" :dragenter"i…

.Net Core webapi RestFul 统一接口数据返回格式

在RestFul风格盛行的年代&#xff0c;大部分接口都需要一套统一的数据返回格式&#xff0c;那么我们怎么才能保证使用统一的json数据格式返回呢&#xff0c;下面给大家简单介绍一下&#xff1a; 假如我们需要接口统一返回一下数据格式&#xff1a; {"statusCode": …

智能图像编辑软件Luminar Neo mac提供多种调整和滤镜选项

Luminar Neo mac是一款由Skylum公司开发的AI技术图像编辑软件&#xff0c;旨在为摄影师和视觉艺术家提供创意图像编辑解决方案。Luminar Neo拥有强大的AI技术和丰富的后期处理工具&#xff0c;可帮助用户快速轻松地实现从基本到高级的图像编辑需求。 Luminar Neo提供了多种调整…

同步与互斥(二)

一、谁上锁就由谁解锁&#xff1f; 互斥量、互斥锁&#xff0c;本来的概念确实是&#xff1a;谁上锁就得由谁解锁。 但是FreeRTOS并没有实现这点&#xff0c;只是要求程序员按照这样的惯例写代码。 main函数创建了2个任务&#xff1a; 任务1&#xff1…

先进制造身份治理现状洞察:从手动运维迈向自动化身份治理时代

在新一轮科技革命和产业变革的推动下&#xff0c;制造业正面临绿色化、智能化、服务化和定制化发展趋势。为顺应新技术革命及工业发展模式变化趋势&#xff0c;传统工业化理论需要进行修正和创新。其中&#xff0c;对工业化水平的判断标准从以三次产业比重标准为主回归到工业技…

Kubernetes 容器编排(7)

离线业务编排详解 在线业务和离线业务 在线业务 Deployment、StatefulSet以及 DaemonSet 这三个编排概念的共同之处是&#xff1a;它们主要编排的对象&#xff0c;都是"在线业务"&#xff0c;即&#xff1a;Long Running Task&#xff08;长作业&#xff09;。比如…

尚硅谷 java 2023(基础语法)笔记

一、变量与运算符 1、HelloWorld的编写和执行 class HelloChina{public static void main(String[] args){System.out.println("hello,world!!你好&#xff0c;中国&#xff01;");} } 总结&#xff1a; 1. Java程序编写和执行的过程&#xff1a; 步骤1&#xff1…

HackTheBox - Medium - Linux - Sandworm (我的创作纪念日

Sandworm Sandworm 是一台中等难度的 Linux 机器&#xff0c;它托管了一个具有“PGP”验证服务的 Web 应用程序&#xff0c;该服务容易受到服务器端模板注入 &#xff08;SSTI&#xff09; 的攻击&#xff0c;导致“Firejail”监狱内的远程代码执行 &#xff08;RCE&#xff0…

12、Qt:用QProcess类启动外部程序:简单使用

一、说明 简单使用&#xff1a;在一个函数中&#xff0c;使用QProcess类的临时对象调用可执行文件exe&#xff0c;只有这个exe执行完了&#xff0c;这个函数才往下执行&#xff0c;一次性打印出exe所有输出信息&#xff1b;复杂使用&#xff1a;创建QProcess类的全局对象&…

STM32F4的DHT11初始化与实例分析

STM32—— DHT11 本文主要涉及STM32F4 的DHT11的使用以及相关时序的介绍&#xff0c;最后有工程下载地址。 文章目录 STM32—— DHT11一、 DHT11的介绍1.1 DHT11的经典电路 二、DHT11的通信2.1 DHT11的传输数据格式2.2 DHT11 通信分步解析 三、 DHT11 代码3.1 引脚图3.2 电路图…

阿里云林立翔:基于阿里云 GPU 的 AIGC 小规模训练优化方案

云布道师 本篇文章围绕生成式 AI 技术栈、生成式 AI 微调训练和性能分析、ECS GPU 实例为生成式 AI 提供算力保障、应用场景案例等相关话题展开。 生成式 AI 技术栈介绍 1、生成式 AI 爆发的历程 在 2022 年的下半年&#xff0c;业界迎来了生成式 AI 的全面爆发&#xff0c…

【接口测试】HTTP接口详细验证清单

概述 当我们在构建、测试、发布一套新的HTTP API时&#xff0c;包括我在内的大多数人都不知道他们所构建的每一个组件的复杂性和细微差别。 即使你对每一个组件都有深刻的理解&#xff0c;也可能会有太多的信息在你的脑海中出现。 以至于我们不可能一下把所有的信息进行梳理…

pycharm下执行conda命令提示无法识别解决方案

1 问题描述 win10环境命令行执行conda命令&#xff0c;报命令无法识别&#xff0c;错误信息如下&#xff1a; PS D:\code\cv> conda activate pt conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&a…