一、知识点简介
DriveInfo是C#中专门用于获取本地磁盘驱动器信息的工具类,隶属于System.IO命名空间。该类可以读取电脑盘符的总容量、剩余可用空间、磁盘格式、磁盘类型、磁盘名称、根目录等相关硬件信息。
该类作用:实现软件检测磁盘容量、判断磁盘类型、检测存储空间是否充足,常见于文件管理系统、安装程序、磁盘监控项目中。
二、完整源代码
using System;
using System.IO;
using System.Windows.Forms;
namespace _7DriveInfo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//主要获取相关驱动器的 一些信息(驱动器剩余的空间, 驱动器类型等)
//1.实例化磁盘驱动器对象,指定需要查询的C盘
DriveInfo info = new DriveInfo(@"c:\");
//2.调用属性,获取磁盘各项信息并打印在控制台
Console.WriteLine(info.AvailableFreeSpace);//获取剩余空间(字节为单位)
Console.WriteLine(info.DriveType); //获取驱动器类型
Console.WriteLine(info.DriveFormat);//获取磁盘文件系统格式
Console.WriteLine(info.Name);//获取驱动器名称
Console.WriteLine(info.RootDirectory);//获取驱动器根目录
Console.WriteLine(info.TotalSize);//获取驱动器总容量
}
}
}
三、代码逐段拆分详解
1、实例化DriveInfo磁盘对象
DriveInfo info = new DriveInfo(@"c:\");
创建DriveInfo类实例对象,参数填写磁盘盘符路径;本案例传入c:\,表示绑定电脑C盘,用于后续获取C盘所有相关信息。可修改为D盘、E盘进行查询。
2、AvailableFreeSpace 属性
Console.WriteLine(info.AvailableFreeSpace);
作用:获取当前磁盘可用剩余空间;计量单位为字节(Byte),需要自行换算成MB、GB。
3、DriveType 属性
Console.WriteLine(info.DriveType);
作用:获取驱动器类型;返回枚举值,可区分硬盘、U盘、光驱、移动磁盘,固定硬盘返回Fixed类型。
4、DriveFormat 属性
Console.WriteLine(info.DriveFormat);
作用:获取磁盘文件系统格式;电脑硬盘一般为NTFS格式,U盘常见FAT32、exFAT格式。
5、Name 属性
Console.WriteLine(info.Name);
作用:获取当前驱动器的盘符名称,例如C盘、D盘。
6、RootDirectory 属性
Console.WriteLine(info.RootDirectory);
作用:获取磁盘的根目录路径,C盘根目录即为C:\。
7、TotalSize 属性
Console.WriteLine(info.TotalSize);
作用:获取磁盘的整体总容量,计量单位同样为字节(Byte)。
四、单位换算公式(拓展)
由于所有容量属性默认返回字节,日常查看需要换算:
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
五、执行流程
1、程序初始化窗体;
2、创建DriveInfo对象,绑定指定磁盘盘符;
3、读取磁盘剩余空间、总大小、磁盘格式、类型、盘符名称、根目录;
4、所有数据输出至控制台,方便开发者查看磁盘信息。
六、知识点总结
1、DriveInfo专门用于检测电脑磁盘驱动器的各项硬件信息;
2、必须通过构造方法传入盘符路径,绑定对应磁盘;
3、AvailableFreeSpace剩余空间、TotalSize总大小,单位默认字节;
4、DriveFormat获取磁盘格式,DriveType判断磁盘设备类型;
5、Name获取盘符名称,RootDirectory获取磁盘根目录路径。
七、易错点
1、传入不存在的盘符,程序直接抛出异常;
2、直接使用字节数值阅读不方便,忘记单位换算;
3、读取光驱且光驱无光盘时,获取容量属性会报错;
4、未引用System.IO命名空间,无法使用DriveInfo类。
------------------FileInfo 文件属性操作------------------------
一、知识点简介
FileInfo 属于文件实例类,需要使用 new 实例化对象,专门用来获取和设置单个文件/文件夹的全部详细属性。
区别:File 是静态类,适合快速简单操作;FileInfo 是实例类,适合长期对同一个文件进行多次操作,能够获取文件详细信息(大小、后缀、创建时间、隐藏、只读等)。
主要功能:获取文件完整路径、文件大小、后缀名、创建时间、修改时间、访问时间、设置文件隐藏/只读/存档属性。
二、完整源代码
using System;
using System.IO;
using System.Windows.Forms;
namespace _8文件属性操作
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//1、实例化文件对象,绑定指定txt文件
FileInfo info = new FileInfo(@"C:\Users\Administrator\Desktop\新建文本文档 (2).txt");
Console.WriteLine(info.Attributes); //获取文件特性
//2、实例化文件夹对象,绑定桌面文件夹
FileInfo info1 = new FileInfo(@"C:\Users\Administrator\Desktop\img");
Console.WriteLine(info1.Attributes);//获取文件夹特性
//3、第一种方式:通过FileInfo对象设置文件特性(只读+隐藏)
//info.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden;
//4、第二种方式:静态File类设置文件特性
File.SetAttributes(@"C:\Users\Administrator\Desktop\新建 DOC 文档.doc", FileAttributes.Hidden);
//5、获取文件各项详细属性
Console.WriteLine(info.FullName); //完整路径
Console.WriteLine(info.Name); //文件名称
Console.WriteLine(info.Extension); //文件后缀
Console.WriteLine(info.CreationTime); //创建时间
Console.WriteLine(info.LastWriteTime); //最后修改时间
Console.WriteLine(info.LastAccessTime); //最后访问时间
Console.WriteLine(info.Directory); //所在文件夹路径
Console.WriteLine(info.Exists); //判断文件是否存在
Console.WriteLine(info.Length); //文件大小(字节)
}
}
}
三、代码分段详细拆解
第一段:实例化FileInfo对象
FileInfo info = new FileInfo(@"C:\Users\Administrator\Desktop\新建文本文档 (2).txt");
作用:根据指定绝对路径,实例化文件对象;后续所有属性查询、属性修改,都针对该文件进行操作。
第二段:Attributes 获取文件特性
Console.WriteLine(info.Attributes);
1、Archive:默认属性,普通存档文件;
2、Directory:代表当前对象是文件夹;
3、ReadOnly:只读属性;
4、Hidden:隐藏属性。
第三段:绑定文件夹对象
FileInfo info1 = new FileInfo(@"C:\Users\Administrator\Desktop\img");
Console.WriteLine(info1.Attributes);
FileInfo不仅可以操作文件,也可以操作文件夹;文件夹属性默认显示 Directory(目录)。
第四段:第一种设置文件特性(FileInfo方式)
info.Attributes = FileAttributes.ReadOnly|FileAttributes.Hidden;
通过 | 符号可以给文件同时添加多个特性,该代码作用:将文件设置为只读并且隐藏。
第五段:第二种设置文件特性(File静态方式)
File.SetAttributes(@"文件路径",FileAttributes.Hidden);
直接调用File静态方法,无需实例化对象,适合一次性设置文件属性。
配套方法:File.GetAttributes() 获取文件特性。
第六段:文件所有常用属性详解
Console.WriteLine(info.FullName); //获取文件完整绝对路径
Console.WriteLine(info.Name); //获取文件名称(包含后缀)
Console.WriteLine(info.Extension); //获取文件后缀名 .txt .exe
Console.WriteLine(info.CreationTime); //获取文件创建时间
Console.WriteLine(info.LastWriteTime); //获取文件最后修改时间
Console.WriteLine(info.LastAccessTime); //获取文件最后访问时间
Console.WriteLine(info.Directory); //获取文件所在文件夹路径
Console.WriteLine(info.Exists); //判断文件是否存在,返回true/false
Console.WriteLine(info.Length); //获取文件大小,单位字节
四、File 和 FileInfo 区别
1、File:静态类,不需要new,适合一次性简单操作(创建、删除、复制);
2、FileInfo:实例类,必须new对象,适合长期操作同一个文件,可以获取详细文件属性。
五、文件常用特性枚举
Archive:普通存档文件(所有新建文件默认属性);
ReadOnly:只读,用户无法修改内容;
Hidden:隐藏文件,桌面无法直接看见;
Directory:标识该对象为文件夹。
六、知识点总结
1、FileInfo 必须实例化,专门获取文件详细属性;
2、Attributes属性可以获取、设置文件隐藏、只读、存档特性;
3、设置多属性使用 | 连接多个枚举值;
4、修改文件属性有两种方式:FileInfo对象方式、File静态SetAttributes方式;
5、Length获取文件大小,单位为字节,需要换算GB/MB;
6、Exists判断文件是否存在,防止路径报错。
七、易错点
1、文件路径写错,直接报找不到文件异常;
2、设置Hidden隐藏后,桌面看不到文件,无法直接双击打开;
3、文件设置只读之后,无法写入、修改内容;
4、Length只能获取文件大小,文件夹无法获取大小;
5、多个属性之间必须使用 | 符号,不能直接赋值覆盖原有属性。
------------------------Path类 文件路径操作------------------------
一、知识点简介
Path类属于静态工具类,位于System.IO命名空间,专门用于处理文件、文件夹路径字符串。
Path类不会对文件进行读写、创建、删除操作,只负责对路径字符串进行拆分、拼接、获取文件名、获取后缀、修改后缀、转换绝对路径等操作。所有方法都是静态方法,直接通过Path.方法名调用。
二、完整源代码
using System;
using System.IO;
using System.Windows.Forms;
namespace _9文件路径的操作
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Path:提供获取文件或者目录的路径信息,专门操作路径字符串
//定义文件路径
string filePath = @"C:\Users\Administrator\Desktop\新建 DOC 文档.doc";
//定义文件夹路径
string FilePath = @"C:\Users\Administrator\Desktop\img";
//获取绝对路径
Console.WriteLine(Path.GetFullPath(filePath));
Console.WriteLine(Path.GetFullPath(FilePath));
//获取文件名(带后缀)
Console.WriteLine(Path.GetFileName(filePath));
//获取文件后缀名
Console.WriteLine(Path.GetExtension(filePath));
//修改文件后缀
string ss = Path.ChangeExtension(filePath, ".jpg");
Console.WriteLine(Path.GetExtension(ss));
//将数组元素拼接成完整路径
string[] s1 = new string[] { "C:\\", "Users", "Administrator", "文档.doc" };
Console.WriteLine(Path.Combine(s1));
}
}
}
三、代码分段拆解讲解
1、定义路径字符串
string filePath = @"C:\Users\Administrator\Desktop\新建 DOC 文档.doc";
string FilePath = @"C:\Users\Administrator\Desktop\img";
分别定义一条文件完整路径、一条文件夹完整路径,用于后续所有路径测试方法。
2、GetFullPath() 获取绝对路径
Console.WriteLine(Path.GetFullPath(filePath));
作用:返回该文件/文件夹对应的完整绝对路径。绝对路径就是从电脑盘符开始的完整路径,程序开发中最常用。
3、GetFileName() 获取文件名
Console.WriteLine(Path.GetFileName(filePath));
作用:获取路径中最后的文件名称,包含扩展名,例如:新建 DOC 文档.doc。
4、GetExtension() 获取文件后缀
Console.WriteLine(Path.GetExtension(filePath));
作用:单独获取文件的后缀扩展名,返回值包含小数点,例如:.doc、.txt、.jpg。
5、ChangeExtension() 修改文件后缀
string ss = Path.ChangeExtension(filePath,".jpg");
作用:修改当前路径字符串的后缀名;不会修改本地真实文件,仅仅只是修改字符串,返回新路径。
6、Combine() 路径拼接(重点)
string[] s1 = new string[] { "C:\\", "Users", "Administrator", "文档.doc" };
Console.WriteLine(Path.Combine(s1));
作用:自动根据系统规则拼接路径,自动补充分隔符 \,避免手动拼接路径出现斜杠多余或缺失的BUG;支持传入字符串数组,一次性拼接多级目录。
四、Path类常用方法汇总
1、GetFullPath():获取完整绝对路径;
2、GetFileName():获取文件名(带后缀);
3、GetExtension():获取文件后缀扩展名;
4、ChangeExtension():修改路径后缀名;
5、Combine():智能拼接路径,开发最常用;
6、GetDirectoryName():获取文件所在文件夹路径。
五、知识点总结
1、Path是静态类,全部方法为静态方法,无需new对象;
2、Path只操作路径字符串,不会影响电脑本地真实文件;
3、绝对路径:从盘符开始;相对路径:相对于当前程序Debug目录;
4、修改后缀ChangeExtension只改字符串,不会改变真实文件格式;
5、拼接路径优先使用Combine,不要手动写斜杠拼接,兼容性更强。
六、易错点
1、Path类只能操作字符串,不能创建、删除、修改真实文件;
2、ChangeExtension仅修改路径文本,不会重命名本地文件;
3、手动拼接路径容易多斜杠、少斜杠,建议统一使用Combine;
4、GetFileName对文件夹路径使用,会获取不到任何数据。
------------------using语句 自动释放资源------------------------
一、知识点简介
using语句是C#专门用来自动释放资源的语法,主要针对所有流对象(FileStream、StreamReader、StreamWriter、BufferedStream等)。
普通流操作写完代码必须手动调用Close()关闭、Dispose()释放资源;使用using语法后,程序执行超出using大括号范围时,会自动帮我们销毁流对象、释放文件资源,无需手动写关闭与释放代码,简化代码并且避免忘记关闭文件导致文件被占用的BUG。
二、完整源代码
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace _11using
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//定义需要写入的字符串
string s = "aaabvbbv哈兰德";
//字符串转字节数组
byte[] bs = Encoding.Default.GetBytes(s);
#region using写入文件(追加模式)
//using自动管理FileStream资源
using (FileStream fs = new FileStream(@"1.txt",FileMode.Append))
{
//将字节数组写入文件末尾
fs.Write(bs, 0, bs.Length);
}
#endregion
#region using读取文件(只读模式)
//创建接收数据的缓存字节数组
byte[] rece = new byte[1024 * 1024 * 5];
using (FileStream fs = new FileStream(@"1.txt", FileMode.Open))
{
//读取文件数据,返回实际读取的字节长度
int l = fs.Read(rece, 0, rece.Length);
//字节数组还原为字符串
string ss = Encoding.Default.GetString(rece, 0, l);
//控制台输出 + 弹窗展示数据
Console.WriteLine(ss);
MessageBox.Show(ss);
}
#endregion
}
}
}
三、代码逐段拆分详解
1、数据初始化
string s = "aaabvbbv哈兰德";
byte[] bs = Encoding.Default.GetBytes(s);
1、定义需要写入文件的字符串内容;
2、计算机底层只能识别字节,通过编码将字符串转为byte字节数组;
3、Encoding.Default代表使用电脑系统默认编码格式。
2、using 追加写入文件
using (FileStream fs = new FileStream(@"1.txt",FileMode.Append))
{
fs.Write(bs,0,bs.Length);
}
(1)using作用原理
在using括号内实例化流对象,该对象属于块级作用域,仅能在当前{}内部使用;代码执行完毕跳出大括号,系统自动调用Dispose()释放资源,不需要手动写Close()和Dispose()。
(2)FileMode.Append 追加模式
① 文件存在:直接打开文件,光标默认定位在文件末尾,写入内容直接追加,不会覆盖旧数据;
② 文件不存在:自动创建全新的1.txt文件;
③ 权限限制:Append模式仅支持写入,不支持读取文件数据。
(3)Write写入方法
将转换好的字节数组全部写入当前文件流中。
3、using 读取文件
byte[] rece = new byte[1024*1024*5];
using (FileStream fs = new FileStream(@"1.txt", FileMode.Open))
{
int l = fs.Read(rece,0,rece.Length);
string ss = Encoding.Default.GetString(rece,0,l);
Console.WriteLine(ss);
MessageBox.Show(ss);
}
1)创建缓存数组
初始化5M字节数组作为缓冲区,用来临时存储读取到的文件数据。
(2)FileMode.Open 打开模式
打开指定文件,主要用于读取操作,如果文件不存在直接报错。
(3)Read读取数据
读取文件内容存入缓存数组,返回值int代表本次真实读取到的字节数量。
(4)编码还原
通过Encoding.Default.GetString,将字节数组还原为原始字符串,最后通过控制台和弹窗展示内容。
四、using语句核心优点
1、自动释放资源:执行完大括号内代码,自动销毁流对象;
2、精简代码:不用重复书写Close()、Dispose();
3、安全性高:杜绝忘记关闭文件流,导致文件被锁定、无法删除的问题;
4、作用域隔离:using内部变量外部无法访问,规范代码结构。
五、FileMode.Append与Create区别
1、Create:覆盖模式,文件存在直接清空原有内容,重新写入;
2、Append:追加模式,保留旧数据,在文件末尾新增内容;
3、Append只能用于写入,不能用于读取。
六、整体执行流程
1、将字符串转为字节数组;
2、using+Append模式打开文件,追加写入数据,执行完毕自动释放写入流;
3、重新以Open模式打开文件,读取全部内容;
4、字节数组转字符串,弹窗展示;
5、读取结束自动释放读取流资源。
七、易错点
1、using内部声明的流对象,大括号外部无法使用;
2、Append模式不能读取文件,强行读取直接报错;
3、区分Create(覆盖)和Append(追加),防止误删原有数据;
4、using仅支持实现IDisposable接口的类(所有文件流都支持)。