当前位置: 首页 > news >正文

C#-快速剖析文件和流,并使用

目录

一、概述

二、文件系统

1、检查驱动器信息

2、Path

3、文件和文件夹

三、流

1、FileStream

2、StreamWriter与StreamReader

3、BinaryWriter与BinaryReader


 

一、概述

文件,具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合;

,提供一种向后备存储写入字节和从后备存储读取字节的方式; 

读写文件和目录时可使用简单的API,也可使用先进的API提供更多的功能;

使用,可以压缩数据,并且利用内存映射的文件和管道在不同的任务间共享数据;

 


二、文件系统

System.IO名称空间包含一些简单的API,其中最重要的类用于浏览文件系统和执行操作,如移动、复制和删除文件:

  • FileSystemInfo-这是表示任何文件系统对象(如FileInfo和DirectoryInfo)的基类;
  • FileInfo和File-表示文件系统上的文件;
  • DirectoryInfo和Directory-表示文件系统上的文件夹;
  • Path-包含的静态成员可用于处理路径名;
  • DriveInfo-它的属性和方法提供了指定驱动器的信息;

1、检查驱动器信息

使用DriveInfo的GetDrives()静态方法获取DriveInfo对象数组,再访问每个驱动器信息;

var driveInfos = DriveInfo.GetDrives();
foreach (var driveInfo in driveInfos) Console.WriteLine($"Name:{driveInfo.Name}  totalSize={driveInfo.TotalSize}  freeSpace={driveInfo.TotalFreeSpace}");

 

2、Path

最常用的方法:

  • Path.Combine(),可把任意个字符串参数组合成完整的路径返回;
  • Path.GetFileName(),获取带扩展名的文件名;
  • Path.GetFileNameWithoutExtension(),获取不带扩展的文件名;
  • Path.GetExtension(),获取扩展名
  • Path.GetDirectoryName(),获取文件夹路径名;
  • Path.GetFullPath(),获取包含文件名及扩展名的全路径名;
  • Path.GetTempFileName(),返回一个临时文件夹路径;
  • Path.GetRandomFileName(),返回一个随机文件名;
  • Path.ChangeExtension(),修改指定文件的扩展名;
string path= Path.Combine(Directory.GetCurrentDirectory(),"test.txt");
var path1=Path.GetFileName(path);
var path2=Path.GetFileNameWithoutExtension(path);
var path3=Path.GetExtension(path);
var path4=Path.GetDirectoryName(path);
var path5=Path.GetFullPath(path);
Console.WriteLine($"文件名:{path1}  无扩展文件名{path2}  扩展:{path3}\n文件夹路径:{path4}\n全路径名:{path5}");

0e7b658c2f1f438aa0e31a64290240fb.png

Environment.GetFolderPath(),获取特殊文件夹的路径:

var foldPath=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Console.WriteLine(foldPath);//C:\Users\Administrator\Documents

 

3、文件和文件夹

 File、Directory定义静态方法,FileInfo、DirectoryInfo提供实例方法,对于大多文件属性只读不可修改,但可设置创建时间和最后一次访问时间;

File常用方法: 

  • File.WriteAllText(),创建并写入文件;
  • File.WriteAllLines(),创建并写入所有行;
  • File.ReadAllBytes(),读取文件所有内容;
  • File.ReadAllLines(),读取文件所有行;
  • File.AppendAllText(),追加的方式写入所有内容;
  • File.AppendAllLines(),追加的方式写入所有行;
  • File.Copy(),复制文件;
  • File.Exists(),判断文件是否存在;
  • File.Create(),创建指定路径文件;
  • File.Open(),打开指定路径上的FileStream(文件流);
  • File.OpenWrite(),打开或创建一个文件用于写,返回可写的流(流位置在开始);
  • File.OpenRead(),打开存在的文件用于读,返回可读的流;

Directory常用方法: 

  • Directory.Exists(),判断文件夹是否存在;
  • Directory.GetDirectories(),获取指定目录中所有子目录的名称;
  • Directory.GetDirectoryRoot(),返回指定路径的卷信息、根信息或二者同时返回;
  • Directory.GetCurrentDirectory(),获取当前工作目录;
  • Directory.GetFiles(),获取指定目录的所有文件名称;
  • Directory.GetFileSystemEntries(),获取所有文件和子目录名称;
  • Directory.GetParent(),检索指定路径的父目录;

 FileInfo常用属性(方法大多与File静态类相同)

  • Directory:获取父目录实例;
  • DirectoryName:获取表示目录完整路径的字符串;
  • FullName:获取目录或文件的完整目录;
  • Name:获取文件名;
  • IsReadOnly,获取和设置文件只读;
  • Extension,获取文件扩展名;
  • CreationTime,获取和设置文件创建时间;
  • LastAccessTime,获取和设置文件最后访问时间;
  • Attributes,获取和设置文件的特性;
  • Length,获取文件大小,以字节为单位;

DirectoryInfo常用属性(方法大多与Directory静态类相同)

  • Extension:获取表示文件扩展名部分的字符串;
  • Parent:获取指定子目录的父目录;
  • Root:获取路径的根部分;

 


三、流

流是一个用于传输数据的对象,数据可以向两个方向传输,如果数据从外部源传输到程序中,为读取流,如果数据从程序传输到外部源中,为写入流

外部源常常是一个文件,但也不完全是文件,外部数据源可以是 :文件流,网络流、内存流或任意数据源;

Stream类,是构成所有其它流的抽象类;

一些流可以链接起来,比如DeflateStream可压缩数据(该流可写入FileStream、MemoryStream或NetworkStream),CryptoStream可以加密数据,可以链接DeflateStream和CryptoStream,再写入FileStream;

1、FileStream

文件流,在磁盘或网络路径上指向文件的流;

①FileStream常用构造器

  • 参数1,指定文件路径;
  • 参数2,FileMode枚举(Append追加或新建,Create新建或改写,Open打开文件,CreateNew新建,OpenOrCreate,打开文件或新建,Truncate打开并清空);
  • 参数3,FileAccess枚举,读、写、读与写;
  • 参数4,FileShare枚举,Delete、None、Read、Write。。。;

②常用属性:

  • CanRead、CanSeek、CanTimeout、CanWrite
  • IsAsync,是异步还是同步打开文件流;
  • Length,获取用字节表示的流长度;
  • Name、Position、ReadTimeout、WriteTimeout

③常用方法:

  • BeginRead()、BeginWrite(),异步读、写操作;
  • Close()、Read()、ReadByte()、WriteByte();
  • Write(),写入一个字节数组或Span类型(不用传开始位置和大小);
  • EndRead(),等待挂起的异步读取完成;
  • EndWrite(),结束异步写入,在I/O操作完成前一直阻止;
  • (Unlock)Lock(),允许读取访问的同时防止其它进程更改FileStream;
  • Seek(),设置该流当前位置;
  • SetLength(),设置读流的长度;
  • CopyTo(),复制流;

 


2、StreamWriter与StreamReader

由于直接读写流不是那么容易,所以一般使用读写器和写入器;

基类分别为TextWriter和TextReader(也是StringWriter和StringReader基类);

文本文件的写入、读取流,一般以一个Stream类型对象构造(可指定编码);

①StreamWriter

常用属性:Encoding、Formatprovider、NewLine、AutoFlush

常用方法(部分方法提供异步):

  • Close(),关闭当前流对象;
  • Write(),写字符串到流;
  • WriteLine(),写一行字符串到流;
  • Dispose(),释放当前流对象资源;
  • Flush(),刷新(清空)当前流缓存区;

②StreamReader

常用属性:EndOfStream,可检查文件的末尾

常用方法(部分方法提供异步):

  • Close()、Read()、ReadLine(),同上
  • ReadBlock(),读取最大count的字符并从index开始写入buffer;
  • ReadToEnd(),将整个流(从当前位置到结尾)作为字符串读取;

 


3、BinaryWriter与BinaryReader

专门用于读写二进制格式的流产品API ;

以Stream类型对象构造;

①BinaryWriter,以二进制形式将基元类型写入流

常用方法:

  • Close(),关闭流;
  • Write(),写字节数组(提供string、int等多种重载)到流;
  • Seek(),写入位置标识偏移到指定位置;

②BinaryReader,用特定编码将基元数据类型读作二进制值

常用方法:

  • Close(),关闭流;
  • ReadByte(),读取一个字节返回
  • ReadBytes(),读取指定count字节返回
  • Read(),从index开始读取count个字节到buffer中;
  • ReadBoolean(),ReadChar(),ReadInt32(),ReadString()。。。读取指定类型返回;      

 

 

 

相关文章:

C#-快速剖析文件和流,并使用

目录 一、概述 二、文件系统 1、检查驱动器信息 2、Path 3、文件和文件夹 三、流 1、FileStream 2、StreamWriter与StreamReader 3、BinaryWriter与BinaryReader 一、概述 文件,具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合; …...

【Linux】如何在Ubuntu 20.04上安装PostgreSQL

介绍 PostgreSQL或Postgres是一个关系数据库管理系统,提供SQL查询语言的实现。它符合标准,具有许多高级功能,如可靠的事务和无读锁的并发性。 本指南演示了如何在Ubuntu 20.04服务器上快速启动和运行Postgres,从安装PostgreSQL到…...

IT程序员面试题目汇总及答案-计算机面试

程序员面试题目汇总及答案-计算机面试 问题1:请你描述一下你在过去的工作中遇到的一个技术难题,你是如何解决的? 答案1:在我之前的工作中,我遇到了一个涉及大数据处理的问题。由于数据量巨大,传统的处理方法无法在规定的时间内完成。我最后采用了一种分布式计算的方法,…...

【Flink on k8s】- 5 - 简要介绍 Flink

目录 1、了解流计算框架 1.1 分代 1.2 流计算框架对比 2、Flink 的应用场景 2.1 Data anal...

物联网安全芯片ACL16 采用 32 位内核,片内集成多种安全密码模块 且低成本、低功耗

ACL16 芯片是研制的一款32 位的安全芯片,专门面向低成本、低功耗的应用领域, 特别针对各类 USB KEY 和安全 SE 等市场提供完善而有竞争力的解决方案。芯片采用 32 位内核,片内集成多种安全密码模块,包括SM1、 SM2、SM3、 SM4 算法…...

【Linux top命令】

文章目录 深入了解Linux top命令:实时监控系统性能1. 什么是top命令?2. 使用top命令3. top命令交互操作 深入了解Linux top命令:实时监控系统性能 1. 什么是top命令? top命令是一个用于实时监控系统性能的文本界面工具。它显示当…...

深入理解 Promise:前端异步编程的核心概念

深入理解 Promise:前端异步编程的核心概念 本文将帮助您深入理解 Promise,这是前端异步编程的核心概念。通过详细介绍 Promise 的工作原理、常见用法和实际示例,您将学会如何优雅地处理异步操作,并解决回调地狱问题。 异步编程和…...

Linux 和 macOS 的主要区别在哪几个方面呢?

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…...

springboot(ssm寝室小卖部系统 宿舍小商店网站Java(codeLW)

springboot(ssm寝室小卖部系统 宿舍小商店网站Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&#x…...

什么是web组态?一文读懂web组态

随着工业4.0的到来,物联网、大数据、人工智能等技术的融合应用,使得工业领域正在经历一场深刻的变革。在这个过程中,web组态技术以其独特的优势,正在逐渐受到越来越多企业的关注和认可。那么,什么是web组态&#xff1f…...

华为OD机试真题-智能成绩表-2023年OD统一考试(C卷)

题目描述: 小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗? 输入描述: 第1行输入两个整数,学生人数n和科目数量m。0<n<100,0<m<10 第2行输入m个科目名称,彼此之间用空格隔开。科目名称只由英文字母构成,单个长度不超过10个字符…...

YOLOv5独家原创改进:SPPF自研创新 | 可变形大核注意力(D-LKA Attention),大卷积核提升不同特征感受野的注意力机制

💡💡💡本文自研创新改进: 可变形大核注意力(D-LKA Attention)高效结合SPPF进行二次创新,大卷积核提升不同特征感受野的注意力机制。 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合p…...

算法:进制之前的转换

1. X进制转换成十进制-V1&#xff1a; /*** 笨办法&#xff0c;从左往右开始* Tips&#xff1a;只支持正数** param num* param radix* return*/private static Integer xToTenV1(String num, Integer radix) {if (num.length() 0 || num.charAt(0) -) {throw new IllegalArg…...

VS2009和VS2022的错误列表可复制粘贴为表格

在VS2019或VS2022中&#xff0c;可看到如下错误列表&#xff1a; 如果复制这两行错误信息&#xff1a; 然后把它粘贴到word文件&#xff0c;就可以看到以下表格&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0020 未定义标识符 "dd"…...

springboot3 liquibase SQL执行失败自动回滚,及自动打tag

一&#xff1a; 自动执行回滚&#xff0c; 已执行成功的忽略&#xff0c;新sql执行失败则执行新sql文件中的回滚sql pom.xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.25.0&…...

Flink入门之核心概念(三)

任务槽 TaskSlots: 任务槽&#xff0c;是TaskManager提供的用于执行Task的资源&#xff08;CPU 内存&#xff09; TaskManager提供的TaskSlots的个数&#xff1a;主要由Taskmanager所在机器的CPU核心数来决定&#xff0c;不能超过CPU的最大核心数 1.可以在flink/conf/flink-c…...

算法备胎hash和队列的特征——第五关青铜挑战

内容1.Hash存储方式2.Hash处理冲突的方式3.队列存储的基本特征4.如何使用链表来实现栈 1.Hash 基础 1.1Hash的概念和基本特征 哈希&#xff08;Hash&#xff09;也称为散列&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&#xff0c;变换成固定长度的输出&#…...

LLM之Agent(五)| AgentTuning:清华大学与智谱AI提出AgentTuning提高大语言模型Agent能力

​论文地址&#xff1a;https://arxiv.org/pdf/2310.12823.pdf Github地址&#xff1a;https://github.com/THUDM/AgentTuning 在ChatGPT带来了大模型的蓬勃发展&#xff0c;开源LLM层出不穷&#xff0c;虽然这些开源的LLM在各自任务中表现出色&#xff0c;但是在真实环境下作…...

LLM之Agent(三):HuggingGPT根据用户需求自动调用Huggingface合适的模型

​ 浙大和微软亚洲研究院开源的HuggingGPT&#xff0c;又名JARVIS&#xff0c;它可以根据用户的自然语言描述的需求就可以自动分析需要哪些AI模型&#xff0c;然后去Huggingface上直接调用对应的模型&#xff0c;最终给出用户的解决方案。 一、HuggingGPT的工作流程 它的…...

【上海大学数字逻辑实验报告】五、记忆元件测试

一、实验目的 掌握R-S触发器、D触发器和JK触发器的工作原理及其相互转换。学会用74LS00芯片构成钟控RS触发器。学会用74LS112实现D触发器学会在Quartus II上用D触发器实现JK触发器。 二、实验原理 基本R-S触发器是直接复位-置位的触发器&#xff0c;它是构成各种功能的触发器…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...