当前位置: 首页 > 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()。。。读取指定类型返回;      

 

 

 

http://www.lryc.cn/news/256084.html

相关文章:

  • 【Linux】如何在Ubuntu 20.04上安装PostgreSQL
  • IT程序员面试题目汇总及答案-计算机面试
  • 【Flink on k8s】- 5 - 简要介绍 Flink
  • 物联网安全芯片ACL16 采用 32 位内核,片内集成多种安全密码模块 且低成本、低功耗
  • 【Linux top命令】
  • 深入理解 Promise:前端异步编程的核心概念
  • Linux 和 macOS 的主要区别在哪几个方面呢?
  • springboot(ssm寝室小卖部系统 宿舍小商店网站Java(codeLW)
  • 什么是web组态?一文读懂web组态
  • 华为OD机试真题-智能成绩表-2023年OD统一考试(C卷)
  • YOLOv5独家原创改进:SPPF自研创新 | 可变形大核注意力(D-LKA Attention),大卷积核提升不同特征感受野的注意力机制
  • 算法:进制之前的转换
  • VS2009和VS2022的错误列表可复制粘贴为表格
  • springboot3 liquibase SQL执行失败自动回滚,及自动打tag
  • Flink入门之核心概念(三)
  • 算法备胎hash和队列的特征——第五关青铜挑战
  • LLM之Agent(五)| AgentTuning:清华大学与智谱AI提出AgentTuning提高大语言模型Agent能力
  • LLM之Agent(三):HuggingGPT根据用户需求自动调用Huggingface合适的模型
  • 【上海大学数字逻辑实验报告】五、记忆元件测试
  • yaml工作常用语法总结
  • bash中通过变量中的内容获取对应的关联数组
  • Redis Geo操作地理位置
  • 市面上的AR眼镜:优缺点分析
  • 2024年湖南省职业院校技能竞赛高职组电子与信息专业类软件测试赛项竞赛规程及样题
  • 10、pytest通过assert进行断言
  • Webpack技术入门与实践
  • HarmonyOS开发(九):数据管理
  • acwing-Linux学习笔记
  • Python渗透测试——一、数据包的编辑工具——Scapy
  • 使用webstrom编写vue开启提示