.NET I/O 学习笔记:文件的读和写
我们在对文件进行读写操作时首先需要把文件转换成文件流(FileStream)对象。Stream类及其派生类(包括FileStream类)都提供了Read和Write方法,可支持在字节级别对数据进行读写。假如我们的程序需要将字符数据写入到流中,需要先将字符数据转换为字节数据之后才能将数据写入到流中。所以.NET为我们提供了一下更方便的支持对流进行读写的类:BinaryWriter和BinaryReader、StreamWriter和StreamReader。
1.使用BinaryWriter 和 BinaryReader 对象
BinaryWriter:以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。
BinaryReader:用特定的编码将基元数据类型读作二进制值。
下面是示例代码:
1 public static void WriterReadFile(string filePath) 2 { 3 FileStream fs = null; 4 if (File.Exists(filePath)) 5 { 6 Console.WriteLine("文件已存在."); 7 //return; 8 } 9 using (fs = new FileStream(filePath, FileMode.Create)) 10 { 11 BinaryWriter bw = new BinaryWriter(fs); 12 for (int i = 0; i <= 10; i++) 13 { 14 bw.Write(i); 15 } 16 } 17 using (fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 18 { 19 BinaryReader br = new BinaryReader(fs); 20 for (int i = 0; i <= 10; i++) 21 { 22 Console.WriteLine(br.ReadInt32()); 23 } 24 } 25 }
2.使用StreamWriter和StreamReader对象
StreamWriter:实现一个 TextWriter,使其以一种特定的编码向流中写入字符。
StreamReader:实现从字符串进行读取的 TextReader。
下面是示例代码:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //如果文件不存在则创建文件 6 using (StreamWriter sw = File.AppendText("log.txt")) 7 { 8 WriteLog("日志1", sw); 9 WriteLog("日志2", sw); 10 sw.Close(); 11 } 12 using (StreamReader sr = File.OpenText("log.txt")) 13 { 14 ReadLog(sr); 15 } 16 17 Console.Read(); 18 } 19 20 /// <summary> 21 /// 记录日志 22 /// </summary> 23 /// <param name="logMessage">日志信息</param> 24 /// <param name="sw">StreamWriter父类对象</param> 25 public static void WriteLog(string logMessage, TextWriter sw) 26 { 27 sw.Write("Log 开始:");//在.Net 4.5提供了异步读写方法 28 sw.WriteLine("{0} {1}",DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString()); 29 sw.WriteLine(" :"); 30 sw.WriteLine(" :{0}", logMessage); 31 sw.WriteLine("-----------------------------"); 32 //更新文件文本 33 sw.Flush(); 34 } 35 36 /// <summary> 37 /// 读取日志 38 /// </summary> 39 /// <param name="sr"></param> 40 public static void ReadLog(StreamReader sr) 41 { 42 string line; 43 while((line =sr.ReadLine())!=null) 44 { 45 Console.WriteLine(line); 46 } 47 sr.Close(); 48 } 49 }
猛击下载:示例源码
参考资料:
http://msdn.microsoft.com/zh-cn/library/36b93480(v=vs.100)
http://msdn.microsoft.com/zh-cn/library/3zc0w663(v=vs.100)
作者:晴天猪
出处:http://www.cnblogs.com/IPrograming
本文版权归作者和博客园共有,转载请注明出处。