一、IO概念1。概念I/OInput/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) { isChiocfalse; } 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.IsReadydriveArr.DriveTypeDriveType.Fixed) { //存储全部卷标 卷标为空写本地磁盘不为空写其本身 volumeLabelName (driveArr.VolumeLabelstring.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.异常捕获