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触发器是直接复位-置位的触发器,它是构成各种功能的触发器…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
