news 2026/5/16 20:39:46

C#基础IO11

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#基础IO11

一、IO概念

1。概念:


I/O:Input/Output,即输入和输出
C# 的 I/O 操作主要围绕 控制台输入输出(一般数据显示到控制台,注意格式化) 和 文件输入输出(即文件的读写操作)。

2。I/O 重要的类对象:文件操作,目录操作,路径操作


控制台输入输出:Console类
文件输入输出(即流对象):
BinaryReader 从二进制流读取原始数据。
BinaryWriter 以二进制格式写入原始数据。
BufferedStream 字节流的临时存储。
***Directory 有助于操作目录结构。
***DirectoryInfo 用于对目录执行操作。

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; namespace MYN_5._14_IO创建目录 { internal class Program { static bool isChioc = true; static void Main(string[] args) { while (isChioc) { try { Console.Write("请输入一个文件夹的名称:"); string folderName = Console.ReadLine(); if (Directory.Exists(folderName)) { Console.WriteLine("文件夹已存在!"); } else { //创建文件夹 DirectoryInfo directoryInfo = Directory.CreateDirectory(folderName); Console.WriteLine("文件夹创建成功!"); } Console.WriteLine("请选择操作;1.删除 2.重命名 3.移动"); bool isChioc = int.TryParse(Console.ReadLine(), out int chioc); string path = Path.Combine(Environment.CurrentDirectory, folderName); switch (chioc) { case 1: Directory.Delete(path); Console.WriteLine("删除成功!"); IsContinue(); break; case 2: Console.Write("请输入新的文件夹名字:"); string newFolderName = Console.ReadLine(); string newPath = Path.Combine(Environment.CurrentDirectory, newFolderName); Directory.Move(path, newPath); Console.WriteLine("重命名成功!"); IsContinue(); break; case 3: DriveInfo[] driveInfos = DriveInfo.GetDrives(); string driveName = string.Empty; for (int i = 0; i < driveInfos.Length; i++) { driveName += driveInfos[i].Name + "\t"; } Console.Write($"请输入移动到哪个盘符:{driveName} "); string selectDrive = Console.ReadLine(); string drivePath = Path.Combine(Environment.CurrentDirectory, selectDrive); Directory.Move(path, drivePath); IsContinue(); break; default: Console.WriteLine("请输入正确的选项!"); break; } } catch (Exception e) { Console.WriteLine(e.Message); } finally { Console.WriteLine("不论try语句是否执行成功,finally总会执行,所以finally一般做一些收尾工作:释放对象"); } } } public static void IsContinue() { Console.WriteLine("是否继续(Y/N):"); string str = Console.ReadLine(); if (str.ToUpper() == "Y") { Console.Clear(); isChioc = true; } else if(str.ToUpper()=="N") { isChioc=false; } else { Console.WriteLine("请输入正确的选项!"); } } } }


***DriveInfo 提供驱动器的信息。

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Remoting.Channels; using System.Text; using System.Threading.Tasks; namespace _2.驱动器练习 { internal class Program { static void Main(string[] args) { DriveInfo[] driveInfos= DriveInfo.GetDrives();//获取本机全部驱动器(驱动器数组类型) //定义变量都为空 string driveName = string.Empty; string volumeLabelName = ""; DriveInfo driveArr = null; //遍历驱动器数组 for (int i = 0; i < driveInfos.Length; i++) { //获取单个驱动器 driveArr = driveInfos[i]; //判断驱动器是否准备好&&驱动器类型是固定盘 if (driveArr.IsReady&&driveArr.DriveType==DriveType.Fixed) { //存储全部卷标 卷标为空写本地磁盘,不为空写其本身 volumeLabelName += (driveArr.VolumeLabel==string.Empty?"本地磁盘": driveArr.VolumeLabel); //存储全部驱动器卷标和驱动器名字,同时将替代为空,内存有字节转为GB driveName += $"{volumeLabelName}\t{driveArr.Name.Replace("\\", "")}可用{driveArr.TotalFreeSpace / 1024F / 1024F / 1024F:F1}GB内存,共有{driveArr.TotalSize / 1024f / 1024f / 1024f:N1}GB内存\n"; } } Console.WriteLine($"显示本机的全部驱动器\n{driveName}"); } } }


***File 有助于处理文件。
***FileInfo 用于对文件执行操作。 Information

注意:这里Info结尾的都是实例对象,stream结尾的是流对象,Directory、File是静态类
***FileStream 用于文件中任何位置的读写。Stream流 以Stream结尾的都是流对象

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _3.文件练习 { internal class Program { static bool isChioc = true; static void Main(string[] args) { while (isChioc) { try { Console.Write("请输入一个文件名:"); string fileName = Console.ReadLine(); FileInfo fileInfo = new FileInfo(fileName + ".txt"); FileStream fileStream = null; if (fileInfo.Exists) { Console.WriteLine("文件已存在!"); Console.Write("请输入要追加的内容:"); string str = Console.ReadLine(); using (fileStream = fileInfo.Open(FileMode.Append, FileAccess.Write, FileShare.Write)) { byte[] arr = Encoding.UTF8.GetBytes(str); fileStream.Write(arr, 0, arr.Length); } } else { fileStream = fileInfo.Create(); Console.WriteLine("文件创建成功!"); byte[] arr = Encoding.UTF8.GetBytes("huakjwo kdj"); fileStream.Write(arr, 0, arr.Length); fileStream.Close(); } Console.WriteLine("请选择操作:1.删除 2.重命名 3.移动 4.复制 5.获取文件信息"); bool isChioc = int.TryParse(Console.ReadLine(), out int chiocNum); string newFileName = string.Empty; switch (chiocNum) { case 1: fileInfo.Delete(); Console.WriteLine("删除成功!"); IsContinue(); break; case 2: Console.Write("请输入新的文件名:"); newFileName = Console.ReadLine(); fileInfo.MoveTo(newFileName + ".txt"); Console.WriteLine("重命名成功!"); IsContinue(); break; case 3: fileInfo.MoveTo(@"D:\"+fileInfo.Name); Console.WriteLine("移动成功!"); IsContinue(); break; case 4: Console.WriteLine("请输入新的文件名:"); newFileName = Console.ReadLine(); fileInfo.CopyTo(newFileName); Console.WriteLine("复制成功!"); IsContinue(); break; case 5: Console.WriteLine("打印全部文件信息"); Console.WriteLine($"获取完整目录{fileInfo.FullName}"); Console.WriteLine($"获取文件名{fileInfo.Name}"); Console.WriteLine($"获取文件大小{fileInfo.Length / Math.Pow(1024f, 3)}GB"); Console.WriteLine($"获取上次访问时间{fileInfo.LastAccessTime}"); Console.WriteLine($"获取目录{fileInfo.Directory}"); Console.WriteLine($"完整路径{fileInfo.DirectoryName}"); IsContinue(); break; default: Console.WriteLine("请输入正确的选项"); break; } } catch (Exception e) { Console.WriteLine(e.Message); } } } public static void IsContinue() { Console.WriteLine("是否继续(Y/N):"); string str = Console.ReadLine(); if (str.ToUpper() == "Y") { Console.Clear(); isChioc = true; } else if (str.ToUpper() == "N") { isChioc = false; } else { Console.WriteLine("请输入正确的选项!"); } } } }

返回流,一般都要关闭
Close();或者using

***MemoryStream 用于随机访问存储在内存中的数据流。
***Path 对路径信息执行操作。

路径分为绝对路径和相对路径

C:\和D:\开头的路径可以看成绝对路径


StreamReader 用于从字节流中读取字符。
StreamWriter 用于向一个流中写入字符。
StringReader 用于读取字符串缓冲区。
StringWriter 用于写入字符串缓冲区。

3.IO涉及知识点回顾

Main必须是静态的,返回值参数都可以改变
面向对象4大特征:封装、继承、多态和抽象
FileStream和MemoryStream都继承于Stream
通过类名或类本身操作的方法叫做静态方法

类对象:类本身 可以看成不会生成的人,不能实体化
实例对象:由类生成的对象

构造函数:实例化最基本原因
new 实例化对象,生产,产出
静态类里成员一般都是静态的
const默认是静态的,但是省略不写
internal内部的

类库不能独立运行,不能有Main方法,不能有入口函数
类库一般当成一个半成品来使用,相当于工具包,谁使用,谁把当前类库引用进来
方法名可以通过重载重复(重载只与方法名和参数有关,即方法名一样,参数的个数顺序类型不同)
方法的签名:不能重复 方法名+参数列表(个数,顺序,类型)

类对象:高度抽象 例如:桌子
实例对象:具体 例如:第一排第一个的桌子

查看官方文档F1
反编译F12(转定义)

variable变量=》var
推断类型var
动态类型dynamic
程序运行过程:编码,编译,运行
编译:把源代码转换成字节码(二进制,IL代码,中间语言,MSIL)

编译点生成解决方案,启动是将编译和运行一起进行
dynamic类型运行期间,缺点:错误出现的时机太晚了
var类型编译期间推断出类型

Environment.NewLine相当于\n
格式化字符串的占位符
C 人民币
N 数字
P 百分比
X 十六进制

4.流的概念:


流(Stream)是C#中处理数据流动的核心抽象,可以理解为一条"数据水管"。它代表字节序列的抽象,屏蔽了底层数据源的具体细节(文件、网络、内存、管道等),让用户能够用统一的方式读写数据。

5.异常捕获

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 20:39:03

AI Agent Harness Engineering 在法律行业的应用前景

AI Agent Harness Engineering 在法律行业的应用前景&#xff1a;从“黑盒子智能”到“可信任法律伙伴”的破局之路 摘要 &#xff08;全文约12500字&#xff0c;其中核心章节要素完整覆盖&#xff0c;兼顾行业痛点、技术原理、实战应用、未来趋势等维度&#xff09; AI Agent&…

作者头像 李华
网站建设 2026/5/16 20:36:47

Step-by-Step知识蒸馏:让小模型学会大模型的推理思维

1. 项目概述&#xff1a;当“蒸馏”遇上“分步走”最近在模型压缩和知识蒸馏的圈子里&#xff0c;一个挺有意思的讨论点又热了起来&#xff1a;我们是不是把“蒸馏”这件事想得太“一锤子买卖”了&#xff1f;传统思路里&#xff0c;老师模型&#xff08;大模型&#xff09;和学…

作者头像 李华
网站建设 2026/5/16 20:35:43

qData 数据中台社区开源版 v1.4.0 发布,重点推出元数据管理核心模块

近日&#xff0c;qData 数据中台社区开源版 v1.4.0 正式发布。该版本重点推出元数据管理核心模块&#xff0c;完善了数据治理能力&#xff0c;为企业数据资产的管理和利用提供支撑。数据中台简介qData 数据中台是面向企业数据治理与研发的开源中台&#xff0c;具备 ETL 数据集成…

作者头像 李华
网站建设 2026/5/16 20:35:41

基于NXOpen与Python实现UG自动化建模与参数更新

1. 为什么需要NXOpen与Python自动化建模 如果你是一名机械设计工程师&#xff0c;每天都要在UG/NX里手动修改几十个零件的参数&#xff0c;光是想到要重复点击"工具→导入导出表达式"这个菜单&#xff0c;可能就已经开始头疼了。我曾经接手过一个汽车零部件项目&…

作者头像 李华
网站建设 2026/5/16 20:33:07

Hermes Agent框架无缝对接Taotoken作为自定义模型提供商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Hermes Agent框架无缝对接Taotoken作为自定义模型提供商 基础教程类&#xff0c;引导使用Hermes Agent框架的开发者&#xff0c;按…

作者头像 李华