C#IO基础
Directory类和File类:只包含静态方法,不能被实例化。只要调用一个成员方法,提供合适文件系统对象的路径,就可以使用这些类。如果只对文件夹或文件执行一个操作,使用这些类就很有效,因为这样可以省去实例化.NET类 的系统开销。
DirectoryInfo类和FileInfo类:实现与Directory类和File类大致相同的公共方法,并拥有一些公共属性和构造函数,但它们都是有状态的,并且这些类的成员都不是静态的。需要实例化这些类,之后把每个实例与特定的文件夹或文件关联起来。如果使用同一个对象执行多个操作,使用这些类就比较有效。这是因为在构造时它们将读取合适文件系统对象的身份验证和其他信息 ,无论对每个对象(类实例)调用了多少方法,都不需要再次读取这些信息。 比较而言,在调用每个方法时,相应的无状态类需要再次检查文件或文件夹的详细内容。
Path类:包含用于处理路径名的一些静态方法。DriveInfo类:它的属性和方法提供了指定驱动器的信息。
相对路径:当前程序运行所在的路径。在控制台应用程序中,当我们在VS资源管理器中右键解决方案下的项目,点击生成时,生成的exe实际在项目根目录的binDebug下。(当我们右键添加新建项文本文件时,这个文件产生在根目录,我们可以右键文本文件属性,选择复制到输出目录,选择复制方式)
绝对路径:文件在计算机的完整路径。加@是为了不去识别字符串中的转义字符。关于转义字符与正反斜杠详见下文。
![6bf7b8861138f69f25fe039980f788a7.png](https://i-blog.csdnimg.cn/blog_migrate/17e5205dad7ed069ea4e06f28ad45ad1.jpeg)
Windows系统下默认不区分大小写,在Windows10中增加了大小写区分的支持。其余平台大小写支持也不一样,以防万一,最好与文件大小写保持一致。
常用属性
- Name(文件名.后缀 文件夹名)
- FullName(绝对路径)
- Extension(.后缀 对于文件夹是空字符串)
- Exists(文件和文件夹是否存在,不能使用判断null的方法)
- 只对FileInfo---------------------------------------------------
- Length(返回字节长度)
- Directory(获取父目录的实例DirectoryInfo)
- DirectoryName(获取父目录的绝对路径)
- 只对DirectoryInfo---------------------------------------------
- Parent(父目录(上一级文件夹)名字,例如对debug来说就是bin)
- Root(目录的根部分例如F:)
常用方法
- Create()
- Delete()
- MoveTo()
- 只对FileInfo---------------------------------------------------
- CopyTo()
- 只对DirectoryInfo---------------------------------------------
- CreateSubdirectory()(在代表的文件夹下创建文件夹)
- GetDirectories()(返回DirectoryInfo对象数组,该数组表示文件夹当前级中包含的所有子目录)
- GetFiles()(返回FileInfo对象数组,该数组表示文件夹当前级中包含的所有文件)
- GetDirectories()(返回DirectoryInfo对象数组,该数组表示文件夹当前级中包含的所有文件夹)
字节:不同编码格式下汉字所占字节数是不同的,1个Byte(字节)由8 bit(位)组成,也就是2的8次幂。1KB=1024B(字节),1MB=1024KB(千字节),1GB=1024MB(百万字节),1TB(千亿字节)=1024GB(亿字节)
转义字符:(反斜杠)加上某单个字符,转义字符主要解决了字符串内识别冲突的问题。转义字符本质还是一个字符,即char。
- n 换行符(英文读作 slash n)
- t 水平制表符
- v 垂直制表符
- r 回车符
- b 退格符
- f 换页符
- a 警告
- 0 空字符(不是空格,C/C++以0结尾判断字符数组是字符串)
- " 一个双引号
- ' 一个单引号
- 一个反斜杠
![44d9fe25803ff9dc882dc9e972f7ee60.png](https://i-blog.csdnimg.cn/blog_migrate/91f7d14ba8b30a0ef7958b94b1181c99.jpeg)
/(正斜杠)与(反斜杠)
/(正)代表的是除法(在C#中加减乘除两边的操作数都是整数的话,结果还是整数,两个整数做除法时一定要强转为小数)一般在程序里表示路径用/即可(包括Unity里的路径字符串)
(反)在Windows中地址栏直接复制的文件夹路径是以做分隔符的;也常用来构成转义字符。
- 在Linux和Unix环境下,只能以/(正)做目录分隔符
- 在Windows平台上,目录分隔符/(正)(反)都可以
- 在C#程序里,涉及到路径字符串的正反斜杠有两种写法。
![d365ecb4646095e815f6f1f7fe412c34.png](https://i-blog.csdnimg.cn/blog_migrate/076674a8d4fd1813f6cb3fdcfa772288.png)
Windows下默认是不区分大小写的,而Linux是区分大小写的
使用File读写文件
计算机文件基本上分为二种: 二进制文件和 ASCII(也称纯 文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件,由一些字符的串行组成。 如果你将文本文件通过修改后缀的方式修改成图片,但对于程序来说本质上还是文本文件。
![810b6668cb50d0dbcbbef44a86b30634.png](https://i-blog.csdnimg.cn/blog_migrate/053efb3c0e0e02faad3539eba46b06d0.jpeg)