创建或覆盖文件
需求:如果文件不存在,创建之,如果存在,覆盖之。
1,可能有问题的方法
using (FileStream fs = File.OpenWrite(@"d:\work\1.txt")) { byte[] toBytes = Encoding.UTF8.GetBytes("11111111"); fs.Write(toBytes, 0, toBytes.Length); }
这个方法不会清空已存在文件的内容,如果源文件的内容比后写入的内容长,那么这些长的内容会被保留,这通常不是我们想要的结果。
2,正确的方法
using (FileStream fs = File.Create(@"d:\work\1.txt")) { byte[] toBytes = Encoding.UTF8.GetBytes("11111111"); fs.Write(toBytes, 0, toBytes.Length); }
唯一的不同就是把File.OpenWrite改成了File.Create,如果文件已经存在,那么其内容会被清空。
3,方法2的简化版
File.WriteAllBytes(@"d:\work\1.txt", Encoding.UTF8.GetBytes("11111111"));
4,方法2的文本版
using (StreamWriter sw = File.CreateText(@"d:\work\1.txt")) { sw.Write("11111111"); }
5,方法4的简化版
File.WriteAllText(@"d:\work\1.txt", "11111111");
读文件
1,正常读
byte[] buff = new byte[1024]; //假设文件不超过1KB using(FileStream fs = File.OpenRead(@"d:\work\1.txt")) { int len = fs.Read(buff, 0, 1024); string content = Encoding.UTF8.GetString(buff, 0, len); Console.WriteLine(content); }
2,读文本文件
using (StreamReader sr = File.OpenText(@"d:\work\1.txt")) { string content = sr.ReadToEnd(); Console.WriteLine(content); }
3,方法2的简化版
string content = File.ReadAllText(@"d:\work\1.txt");
追加
1,正常追加
using (FileStream fs = File.Open(@"d:\work\1.txt", FileMode.Append, FileAccess.Write)) { byte[] toWrite = Encoding.UTF8.GetBytes("123123\r\n"); fs.Write(toWrite, 0, toWrite.Length); }
2,追加文本
using (StreamWriter sw = File.AppendText(@"d:\work\1.txt")) { sw.Write("123123\r\n"); sw.WriteLine("123123"); //与上面语句等价 }