File类是一个静态类,优点:调用简单;缺点:始终消耗CPU资源。
FileInfo类是一个实例类,优点:调用完就释放CPU资源;缺点:操作复杂
这里用一个读取一篇文章并包含空格,处理空格后,再写回去的操作来演示两者是如何对文件进行操作的。
File类:
//File类 这其实跟StreamReader和StreamWriter类似,操作的都是字符数据
//当然File也能通过字符来操作数据,只是一般不这么做
string[] lines = File.ReadAllLines(@"E:\Users\hxxx\Desktop\test.txt", Encoding.Default);
for (int i = 0; i < lines.Length; i++)
{
lines[i] = lines[i].Replace(" ", "");
Console.WriteLine(lines[i]);
}
File.WriteAllLines(@"E:\Users\hw\Desktop\test.txt", lines, Encoding.UTF8);
Console.ReadKey();
FileInfo类:
//FileInfo类 其实跟FileStream类似,只有三个实例类OpenRead, OpenText, OpenWrite 都是一个意思
//区别在于OpenRead 返回的是FileStream OpenText返回的是StreamRead OpenWrite返回的是FileStream
//可见FileInfo也可以操作字符数据
FileInfo fi = new FileInfo("test.txt");
string contents = string.Empty;
using (FileStream fsRead = fi.OpenRead())
{
byte[] buffer = new byte[1024 * 1024 * 2];
int r = fsRead.Read(buffer, 0, buffer.Length);
contents = Encoding.UTF8.GetString(buffer, 0, r);
contents = contents.Replace(" ", "");
string[] str = contents.Split('\n');
}
using (StreamWriter sw = fi.CreateText()) //这里无法用字节存进去因为容易出现乱码,下次深入讨论这个问题
{
sw.Write(contents);
}