File类与FileInfo类
File是一个静态类,常用于文件操作,读取,修改文件等等。File类的大部分方法最终都是转换为流(Stream)的操作,只不过是.net提取帮你封装好了这些常用的流。并且会自动清理占用的资源。
例如:下面通过反编译来了解下一个File里的一个普通的方法ReadAllText()的源代码:

- [SecuritySafeCritical]
- public static string ReadAllText(string path)
- {
- if (path == null)
- {
- throw new ArgumentNullException("path");
- }
- if (path.Length == 0)
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- }
- return InternalReadAllText(path, Encoding.UTF8); //检测没问题则调用这个方法
- }
private static string InternalReadAllText(string path, Encoding encoding) //上面用到的方法就是这个
{
using (StreamReader reader = new StreamReader(path, encoding)) //可以看到File.ReadAllText()方法最终还是调用StreamReader来操作。
{
return reader.ReadToEnd();
}
}

以下给出常用的方法
AppendAllText 已重载。 将指定的字符串追加到文件中,如果文件还不存在则创建该文件,如果文件存在则直接添加。 两个方法一个重载用于指定编码。
AppendText 创建一个 StreamWriter,它将 UTF-8 编码文本追加到现有文件。
Copy 已重载。 将现有文件复制到新文件。 有1个重载,第三个参数为布尔值,指示是否可以改写原有文件。如果不允许改写,而文件又存在会报错。
Create 已重载。 在指定路径中创建文件。
CreateText 创建或打开一个文件用于写入 UTF-8 编码的文本。
Decrypt 解密由当前帐户使用 Encrypt 方法加密的文件。
Delete 删除指定的文件。如果指定的文件不存在,则不引发异常。
Encrypt 将某个文件加密,使得只有加密该文件的帐户才能将其解密。
Exists 确定指定的文件是否存在。
GetAccessControl 已重载。 获取一个 FileSecurity 对象,它封装指定文件的访问控制列表 (ACL) 条目。
GetAttributes 获取在此路径上的文件的 FileAttributes。
GetCreationTime 返回指定文件或目录的创建日期和时间。
GetCreationTimeUtc 返回指定的文件或目录的创建日期及时间,其格式为协调通用时间 (UTC)。
GetLastAccessTime 返回上次访问指定文件或目录的日期和时间。
GetLastAccessTimeUtc 返回上次访问指定的文件或目录的日期及时间,其格式为协调通用时间 (UTC)。
GetLastWriteTime 返回上次写入指定文件或目录的日期和时间。
GetLastWriteTimeUtc 返回上次写入指定的文件或目录的日期和时间,其格式为协调通用时间 (UTC)。
Move 将指定文件移到新位置,并提供指定新文件名的选项。相当于剪切操作。 此方法依然不分文件类型。
Open 已重载。 打开指定路径上的 FileStream。
OpenRead 打开现有文件以进行读取。
OpenText 打开现有 UTF-8 编码文本文件以进行读取。
OpenWrite 打开现有文件以进行写入。
ReadAllBytes 打开一个文件,将文件的内容读入一个字符串,然后关闭该文件。 此方法不分图片,文本还是视频。
ReadAllLines 已重载。 打开一个文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件。对于中文编码,应该设置编码为UTF-8或GB2312。否则返 回的都是乱码。
ReadAllText 已重载。 打开一个文本文件,将文件的所有行读入一个字符串,然后关闭该文件。
Replace 已重载。 使用其他文件的内容替换指定文件的内容,这一过程将删除原始文件,并创建被替换文件的备份。
SetAccessControl 对指定的文件应用由 FileSecurity 对象描述的访问控制列表 (ACL) 项。
SetAttributes 设置指定路径上文件的指定的 FileAttributes。
SetCreationTime 设置创建该文件的日期和时间。
SetCreationTimeUtc 设置文件创建的日期和时间,其格式为协调通用时间 (UTC)。
SetLastAccessTime 设置上次访问指定文件的日期和时间。
SetLastAccessTimeUtc 设置上次访问指定的文件的日期和时间,其格式为协调通用时间 (UTC)。
SetLastWriteTime 设置上次写入指定文件的日期和时间。
SetLastWriteTimeUtc 设置上次写入指定的文件的日期和时间,其格式为协调通用时间 (UTC)。
WriteAllBytes 创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。如果目标文件已存在,则改写该文件。此方法能够写任何类型的文件,不分文本 图片视频。
WriteAllLines 已重载。 创建一个新文件,在其中写入指定的字符串,然后关闭文件。如果目标文件已存在,则改写该文件。
WriteAllText 已重载。 创建一个新文件,在文件中写入内容,然后关闭文件。如果目标文件已存在,则改写该文件。有一个重载支持设置编码。
文件I/O的改进:
1、在C#4.0之前ReadAllLines()方法用于读取文件中所有的行,并以数组的形式返回,但是它有一个问题,就是这个方法要等所有的行写入内存之后才能读取第一行的内容,.NET4中增加了一个ReadLines方法,该返回返回IEnumerable<string>而不是string[]数组,这个新增的方法效率要高很多,它不是将所有行一次性加入内存中,而是每次只读取一行。这种方法比之前的要好,因为如果打开一个较大的文件,之前的方法要等整个文本都加入内存后,才能访问第一行。而这个新方法并不是将所有行都加载到内存中,而是每次只读取一行。更加高效。
2、WriteAllLines()也增加了类似的IEnumerable重载方法。
以下写了个实例:

- static void Main(string[] args)
- {
- File.AppendText(@"E:\file1.txt"); //创建file1.txt文本并写入内容,如果文件不存在则创建。固定是UTF-8编码,不可改变。
- File.AppendAllText(@"E:\file.txt","你在他乡还好吗?"); //在E盘创建了一个file.txt文件,并在里面写入了 你在他乡还好吗?
- File.Copy(@"E:\file.txt", @"F:\file.txt",false);
- File.Create(@"F:\kk.txt"); //在F盘创建文件,重载中可以设置安全权限等信息。
- Console.Write(File.Exists(@"E:\file.txt")); //文件存在则True否则False
- Console.Write(File.GetCreationTime(@"E:\file.txt")); //输出2013/1/13 23:03:02
- Console.Write(File.GetCreationTimeUtc(@"E:\file.txt")); //输出2013/1/13 15:03:02 全球标准时间
- Console.Write(File.GetLastAccessTime(@"E:\file.txt")); //2013/1/13 23:03:!2 上次访问时间
- Console.Write(File.GetLastAccessTimeUtc(@"E:\file.txt")); //2013/1/13 15:03:12 上次访问时间 全球标准时间
- Console.Write(File.GetLastWriteTime(@"E:\file.txt")); //2013/1/13 12:53:10 上次写入时间
- Console.Write(File.GetLastWriteTimeUtc(@"E:\file.txt")); //2013/1/13 15:53:10 上次写入时间 全球标准时间
- File.Move(@"E:\file.txt",@"F:\file.txt"); //将E盘的file.txt移动到了F盘
- byte[] byteArr = File.ReadAllBytes(@"E:\file.txt");
- foreach (byte b in byteArr)
- {
- Console.Write(b); //输出内容的每个字节,一串数字
- }
- string[] strArr = File.ReadAllLines(@"E:\file.txt", Encoding.GetEncoding("gb2312")); //对于中文,应该设置读取的变啊为gb2312或utf8,否则中文都是问号
- foreach (string str in strArr)
- {
- Console.WriteLine(str); //一行就是一个字符串,所有行组成的字符串数组
- }
- Console.Write(File.ReadAllText(@"E:\file.txt",Encoding.GetEncoding("gb2312"))); //有中文要注意加上编码,否则依然是乱码。
- File.SetCreationTime(@"E:\file.txt", DateTime.Now.AddDays(-1));
- Console.Write(File.GetCreationTime(@"E:\file.txt")); //输出 2013/1/14 23:30:02
- File.SetCreationTime(@"E:\file.txt", DateTime.Now.AddDays(-1)); //国际标准时间
- Console.Write(File.GetCreationTimeUtc(@"E:\file.txt")); //输出 2013/1/14 15:30:36
- File.SetLastAccessTime(@"E:\file.txt", DateTime.Now.AddDays(-1));
- Console.Write(File.GetLastAccessTime(@"E:\file.txt")); //输出 2013/1/14 23:32:46
- File.SetLastAccessTimeUtc(@"E:\file.txt", DateTime.Now.AddDays(-1)); //国际标准时间
- Console.Write(File.GetLastAccessTimeUtc(@"E:\file.txt")); //输出 2013/1/14 15:32:56
- File.SetLastWriteTime(@"E:\file.txt", DateTime.Now.AddDays(-1));
- Console.Write(File.GetLastWriteTime(@"E:\file.txt")); //输出 2013/1/14 23:33:42
- File.SetLastWriteTimeUtc(@"E:\file.txt", DateTime.Now.AddDays(-1)); //国际标准时间
- Console.Write(File.GetLastWriteTimeUtc(@"E:\file.txt")); //输出 2013/1/14 15:33:56
- File.WriteAllText(@"E:\file.txt","真的爱你"); //提示 访问被拒绝,先改掉只读属性吧。然后文件里面的文本变成了"真的爱你",注意会替换原有内容
- string[] strArr = { "你", "好", "吗", "?" };
- File.WriteAllLines(@"E:\file.txt",strArr); //此方法同样会替换原有文本,参数为字符串数组,一个字符串一行
- FileAttributes f = File.GetAttributes(@"E:\file.txt"); //获取到的是一个标志枚举的实例
- if ((f & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) //此处实现了判断文件是否只读,其它信息要通过位运算得到
- {
- Console.Write("此文件是只读的");
- }
- else
- {
- Console.Write("此文件不是只读的");
- }
- //设置文件属性,用标志枚举设置
- File.SetAttributes(@"E:\file.txt", FileAttributes.ReadOnly); //将此文件设置为只读之后真的修改不了了,手动也修改不了。
- File.SetAttributes(@"E:\file.txt", FileAttributes.Hidden | FileAttributes.ReadOnly); //位运算,同时设置隐藏与只读
- string str = "你在他乡还好吗?";
- byte[] bytes = Encoding.UTF8.GetBytes(str);
- File.WriteAllBytes(@"E:\file.txt",bytes); //没有文件会自动创建此段代码已经运行,E:\file.txt文件的内容就变成了 你在他乡还好吗?
- //Open 已重载。 打开指定路径上的 FileStream。 方便了点,帮助new了FileStream而已,跟自己new FileStream一样
- FileStream fs = File.Open(@"E:\file.txt",FileMode.Open,FileAccess.Read);
- byte[] bytes = new byte[fs.Length];
- fs.Read(bytes, 0, (int)fs.Length);
- Console.WriteLine(Encoding.UTF8.GetString(bytes)); //输出E:\file.txt里的文件内容。
- FileStream fs = File.OpenRead(@"E:\file.txt");
- byte[] bytes = new byte[fs.Length];
- fs.Read(bytes, 0, (int)fs.Length);
- Console.WriteLine(Encoding.UTF8.GetString(bytes)); //输出E:file.txt里的文件内容
- FileStream fs = File.OpenWrite(@"E:\file.txt"); //此方法是内容是写在原有内容的前面。
- byte[] bytes = Encoding.UTF8.GetBytes("真的爱你");
- fs.Write(bytes,0,bytes.Length);
- fs.Flush();
- StreamWriter sw = File.CreateText(@"E:\kk.txt");
- sw.Write("测试CreateText方法"); //在E盘下生成一个kk.txt文件,其实File.CreateText内部还是new了个StreamWriter,方便点而已。
- sw.Flush();
- StreamReader sr = File.OpenText(@"E:\kk.txt");
- string str = sr.ReadToEnd();
- Console.WriteLine(str); //输出E:\kk.txt 的内容
- //以下未了解的方法,有时间要研究下
- //File.Encrypt(@"E:\file.txt");
- //File.Decrypt(@"E:file.txt");
- //File.GetAccessControl();
- //SetAccessControl 对指定的文件应用由 FileSecurity 对象描述的访问控制列表 (ACL) 项。
- // 创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。如果目标文件已存在,则改写该文件。
- //File.Replace(@"E:\file.txt", @"E:\file.txt", @"F:\123.txt");
- Console.ReadKey();
- }

File类与FileInfo类的更多相关文章
- C#文件操作基础之File类和FileInfo类
文件和I/O流的差异: 文件是一些具有永久存储及特定顺序的字节组成的一个有序的.具有名称的集合. 因此对于文件,我们经常想到文件夹路径,磁盘存储,文件和文件夹名等方面. I/O流提供一种后备存储写入字 ...
- C# 运用DirectoryInfo类和FileInfo类
DirectoryInfo类和FileInfo类的基类都是FileSystemInfo类,这个类是一个抽象类,也就是说你不可以实例化该类,只能通过继承产生其子类并实例化其子类.然而你却可以运用由该类定 ...
- 文件及文件夹操作- File类、Directory 类、FileInfo 类、DirectoryInfo 类
文件及文件夹操作: C/S:WinForm可以操作客户端文件 Client ServerB/S:Brower Server 命名空间:using system .IO; 1. File类: 创建:Fi ...
- .net框架 - File类与FileInfo类异同
System.IO命名空间中提供的文件操作类有File和FileInfo,这两个类的功能基本相同,只是File是静态类,其中所有方法都是静态的,可以通过类名直接调用,不需要实例化.而FileInfo是 ...
- File类、FileInfo类、Directory类、DirectoryInfo类
File类.Directory类,都是静态类,可以直接使用类名 FileInfo类.DirectoryInfo类,都是动态类,需要new对象,通过对象来操作 [文件的创建.复制.移动.删除]using ...
- file类和fileinfo类的简单对比
File类:提供用于操作文件的静态方法. FileInfo类:提供操作文件的属性和实例方法. Directory类:提供用于操作目录的静态方法. DirectoryInfo类:提供用于操作目录的实例方 ...
- c# DirectoryInfo 类和 FileInfo 类
1.DirectoryInfo 类 DirectoryInfo 类派生自 FileSystemInfo 类.它提供了各种用于创建.移动.浏览目录和子目录的方法.该类不能被继承. 2.FileInfo ...
- File类与FileInfo类区别
ile类是静态的,FileInfo不是静态的也没有静态的方法,仅可用于实例化的对象.FileInfo方法基本类似于File.关于二者,作何选择. ● 如果仅进行单一方法调用,则可以使用静态File类上 ...
- 详解C#中System.IO.File类和System.IO.FileInfo类的用法
System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法. (1) 文件打开 ...
随机推荐
- C51工具是怎么进行覆盖分析的
C51工具针对8051微控制器的有限存储器资源进行了优化设计. 为了最有效地利用存储器,根据一个很容易解释的方法,自动变量和函数参数在存储器中均进行覆盖处理. 首先,连接器根据源程序生成调用树.例如: ...
- ubuntu12中设置PATH环境变量的几种方法(三种办法)
如果在Ubuntu12系统中自行安装了一些软件,特别是使用tar.gz文件包安装的软件,通常会放在/usr/local或者/opt,甚至放在/home下,但是如果要调用或执行时,必须加上完整的路径才可 ...
- TXMLDocument换行的两种方案
手写代码: XML格式化使用msxml引擎,Delphi代码如下: Delphi/Pascal code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Python 的开发环境
建议在Windows 下开发,成本低廉,简单,效率高. 综合下:开发的程序,Python Django (Mysql,PostgreSQL) Nginx Redis ,这一组组合可以适应不同的平台, ...
- linux下ifconfig, DNS以及route配置
转载:http://blog.csdn.net/wangjingfei/article/details/5283632/ 熟悉使用ifconfig 会非常方便. ifconfig eth0 新ip 然 ...
- linux awk 使用
awk是linux下的一个命令,他对其他命令的输出,对文件的处理都十分强大,其实他更像一门编程语言,他可以自定义变量,有条件语句,有循环,有数组,有正则,有函数等.他读取输出,或者文件的方式是一行,一 ...
- ulimit -c unlimited
tomcat 产生core日志: app:/usr/local/apache-tomcat-7.0.55_8082/logs# ulimit -a core file size (blocks, -c ...
- Android应用开发学习之AlertDialog对话框
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文中我们通过一个例子来看AlertDialog对话框的实现,其运行效果如下: 主布局文件main.xml内容如下: ...
- Struts2+Spring+Hibernate 三大框架的合并集成
这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样. 首先看一 ...
- 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
一.移除性算法 (remove) C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...