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}");
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🌍快上🚘,一起学习,让我们成为一个强大的攻城狮࿰…...

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组态?…...

华为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: /*** 笨办法,从左往右开始* Tips:只支持正数** 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中,可看到如下错误列表: 如果复制这两行错误信息: 然后把它粘贴到word文件,就可以看到以下表格: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0020 未定义标识符 "dd"…...

springboot3 liquibase SQL执行失败自动回滚,及自动打tag
一: 自动执行回滚, 已执行成功的忽略,新sql执行失败则执行新sql文件中的回滚sql pom.xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.25.0&…...

Flink入门之核心概念(三)
任务槽 TaskSlots: 任务槽,是TaskManager提供的用于执行Task的资源(CPU 内存) TaskManager提供的TaskSlots的个数:主要由Taskmanager所在机器的CPU核心数来决定,不能超过CPU的最大核心数 1.可以在flink/conf/flink-c…...

算法备胎hash和队列的特征——第五关青铜挑战
内容1.Hash存储方式2.Hash处理冲突的方式3.队列存储的基本特征4.如何使用链表来实现栈 1.Hash 基础 1.1Hash的概念和基本特征 哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出&#…...

LLM之Agent(五)| AgentTuning:清华大学与智谱AI提出AgentTuning提高大语言模型Agent能力
论文地址:https://arxiv.org/pdf/2310.12823.pdf Github地址:https://github.com/THUDM/AgentTuning 在ChatGPT带来了大模型的蓬勃发展,开源LLM层出不穷,虽然这些开源的LLM在各自任务中表现出色,但是在真实环境下作…...

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

【上海大学数字逻辑实验报告】五、记忆元件测试
一、实验目的 掌握R-S触发器、D触发器和JK触发器的工作原理及其相互转换。学会用74LS00芯片构成钟控RS触发器。学会用74LS112实现D触发器学会在Quartus II上用D触发器实现JK触发器。 二、实验原理 基本R-S触发器是直接复位-置位的触发器,它是构成各种功能的触发器…...

yaml工作常用语法总结
文章目录 yaml中的| 符号 和 > 符号yaml中的 - 符号工作中常遇到的问题- 命令行中有冒号加空格,导致yaml解析报错 yaml中的| 符号 和 > 符号 在 YAML 中,| 符号表示标量块(Scalar Block)的开始。它用于表示长文本块或保持多…...

bash中通过变量中的内容获取对应的关联数组
bash中通过变量中的内容获取对应的关联数组 Bash declare 手册: https://phoenixnap.com/kb/bash-declare 实际问题: 在 bash 中创建了多个关联数组,需要根据输入的值,获取不同的关联数组。 可以使用 if 进行多次判断ÿ…...

Redis Geo操作地理位置
Redis Geo 使用场景API列表名词API列表Springboot使用mavenyamlTest 注意事项 Redis Geo 是Redis在3.2版本中新增的功能,用于存储和操作地理位置信息 使用场景 滴滴打车:这是一个对地理位置精度要求较高的场景。通过使用Redis的GEO功能,滴滴…...

市面上的AR眼镜:优缺点分析
AR眼镜是近年来备受关注的科技产品之一。它通过将虚拟信息叠加到现实世界中,为用户提供全新的视觉体验。目前,市面上的AR眼镜主要分为两类:消费级AR眼镜和企业级AR眼镜。 消费级AR眼镜 消费级AR眼镜的特点是轻便、时尚、易于佩戴࿰…...

2024年湖南省职业院校技能竞赛高职组电子与信息专业类软件测试赛项竞赛规程及样题
湖南省职业院校技能竞赛 高职组电子与信息专业类软件测试赛项竞赛规程及样题 一、竞赛内容 1.本赛项考查的技术技能和涵盖的职业典型工作任务 任务项 任务名称 职业典型工作任务 任务一 功能测试 测试计划、测试报告文档设计与编写、测试用例 设计、测试执行和 Bug记录 任务二…...

10、pytest通过assert进行断言
官方实例 # content of test_assert1.pydef f():return 3def test_function():assert f() 4def test_assert_desc():a f()# assert a % 2 0assert a % 2 0, "value was odd, should be even"解读与实操 pytest允许你使用标准python断言来验证测试中的期望值&am…...

Webpack技术入门与实践
1.概念: 本质上, webpack是一个现代JavaScript应用程序的静态模块打包器,当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bund…...

HarmonyOS开发(九):数据管理
1、概述 1.1、功能简介 数据管理为开发者提供数据存储、数据管理能力。 它分为两个部分: 数据存储:提供通用数据持久化能力,根据数据特点,分为用户首选项、键值型数据库和关系型数据库。数据管理:提供高效的数据管…...

acwing-Linux学习笔记
acwing-Linux课上的笔记 acwing-Linux网址 文章目录 1.1常用文件管理命令homework作业测评命令 2.1 简单的介绍tmux与vimvimhomeworktmux教程vim教程homework中的一些操作 3 shell语法概论注释变量默认变量数组expr命令read命令echo命令printf命令test命令与判断符号[]逻辑运算…...

Python渗透测试——一、数据包的编辑工具——Scapy
Python渗透测试 一、Scapy简介二、Scapy中的分层结构三、Scapy中的常用函数四、在Scapy 中发送和接收数据包五、Scapy 中的抓包函数 一、Scapy简介 提到数据包(这里泛指帧、段和报文等)的构造,我们首先需要了解协议和分层这两个概念。在“互联世界的规则一协议”中…...