C# 之 读写文件
1、使用 FileStream 读写文件
添加命名空间引用:
using System; using System.Collections.Generic; using System.Text; using System.IO;
读取核心代码:
byte[] byData = new byte[100]; char[] charData = new char[1000]; try { FileStream sFile = new FileStream("文件路径",FileMode.Open); sFile.Seek(55, SeekOrigin.Begin); //第一个参数是被传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节 // 数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据, //最后一个参数规定从文件读多少字符. sFile.Read(byData, 0, 100); } catch (IOException e) { Console.WriteLine("An IO exception has been thrown!"); Console.WriteLine(e.ToString()); Console.ReadLine(); return; } Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0); Console.WriteLine(charData); Console.ReadLine();
写入核心代码:
FileStream fs = new FileStream(文件路径,FileMode.Create); //获得字节数组 byte [] data =new UTF8Encoding().GetBytes(String); //开始写入 fs.Write(data,0,data.Length); //清空缓冲区、关闭流 fs.Flush(); fs.Close();
2、使用StreamReader和StreamWriter读写文件
StreamReader 读取文件:
StreamReader objReader = new StreamReader(文件路径); string sLine=""; ArrayList LineList = new ArrayList(); while (sLine != null) { sLine = objReader.ReadLine(); if (sLine != null&&!sLine.Equals("")) LineList.Add(sLine); } objReader.Close(); return LineList;
StreamWriter写文件:
FileStream fs = new FileStream(文件路径,FileMode.Create);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));//通过指定字符编码方式可以实现对汉字的支持,否则在用记事本打开查看会出现乱码 sw.Flush(); if (checkfile) { sw.BaseStream.Seek(0, SeekOrigin.End);//移动到结尾 } else { sw.BaseStream.Seek(0, SeekOrigin.Begin); } string temp = "随便写点东西"; sw.WriteLine(temp); sw.Flush(); sw.Close();
fs.Close();
用 BinaryWriter 写入文件:
//实例化一个保存文件对话框 SaveFileDialog sf = new SaveFileDialog(); //设置文件保存类型 sf.Filter = "txt文件|*.txt|所有文件|*.*"; //如果用户没有输入扩展名,自动追加后缀 sf.AddExtension = true; //设置标题 sf.Title = "写文件"; //如果用户点击了保存按钮 if (sf.ShowDialog() == DialogResult.OK) { //实例化一个文件流--->与写入文件相关联 FileStream fs = new FileStream(sf.FileName, FileMode.Create); //实例化BinaryWriter BinaryWriter bw = new BinaryWriter(fs); bw.Write(this.textBox1.Text); //清空缓冲区 bw.Flush(); //关闭流 bw.Close(); fs.Close(); }
用缓存流复制文件:
//创建两个文件流 一个是源文件相关,另一个是要写入的文件 FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open); FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create); //创建一个字节数组,作为两者之间的媒介byte[] data = new byte[1024]; //创建两个缓冲流,与两个文件流相关联 BufferedStream bs = new BufferedStream(fs); BufferedStream bs2= new BufferedStream(fs2); //fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了
while(fs.Read(data,0,data.Length)>0) { fs2.Write(data,0,data.Length); fs2.Flush(); } //关闭流 fs.Close(); fs2.Close();
用内存流来读取图片:
//实例化一个文件流 FileStream fs = new FileStream(文件地址, FileMode.Open); //把文件读取到字节数组 byte[] data = new byte[fs.Length]; fs.Read(data, 0, data.Length); fs.Close(); //实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去 MemoryStream ms = new MemoryStream(data); //设置图片框 pictureBox1中的图片 this.pictureBox1.Image = Image.FromStream(ms);