FileStream读写文件
FileStream类:操作字节的,可以操作任何的文件
StreamReader类和StreamWriter类:操作字符的,只能操作文本文件。
1、FileStream类
FileStream类
命名空间: System.IO
(1)构造函数:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; //FileStream类的命名空间 namespace Filestream读写文件 { class Program { static void Main(string[] args) { //FileStream 操作字节的 //1.创建FileStream类对象 FileStream fsread = new FileStream(@"F:\C#projects\abc.txt",FileMode.OpenOrCreate,FileAccess.Read); byte[] buffer=new byte[1024*1024*2]; //定义一个2M的字节数组 //返回本次实际读取到的有效字节数 int r=fsread.Read(buffer,0,buffer.Length); //每次读取2M放到字节数组里面 //将字节数组中每一个元素按照指定的编码格式解码成字符串 string s=Encoding.Default.GetString(buffer,0,r); //关闭流 fsread.Close(); //释放流所占用的资源 fsread.Dispose(); Console.WriteLine(s); //打印读取到的内容 Console.ReadKey(); } } }
结果为:
(4)将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。
(将数据写入文件)代码为:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; //FileStream类的命名空间 namespace Filestream读写文件 { class Program { static void Main(string[] args) { //将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源 using (FileStream fsWrite = new FileStream(@"F:\C#projects\abc.txt", FileMode.OpenOrCreate, FileAccess.Write)) { string str="看数据会不会被覆盖掉"; byte[] buffer=Encoding.Default.GetBytes(str); fsWrite.Write(buffer, 0, buffer.Length); } Console.WriteLine("写入完成..."); Console.ReadKey(); } } }
运行结果为:
(5)实现多媒体文件的复制
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; //FileStream类的命名空间 namespace 多媒体文件复制 { class Program { static void Main(string[] args) { //思路:就是先将要复制的多媒体文件读取出来,然后再写入到指定的地方 string s_path = @"C:\Users\mei\Desktop\1、复习.avi"; //要读取的文件路径(文件有58.3M) string d_path = @"C:\Users\mei\Desktop\new.avi"; //存放的路径 CopyFile(s_path, d_path); Console.WriteLine("复制完成..."); Console.ReadKey(); } public static void CopyFile(string source,string target) //自定义文件复制函数 { //创建负责读取的流 using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read)) { //创建一个负责写入的流 using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write)) { byte[] buffer=new byte[1024*1024*5]; //声明一个5M大小的字节数组 //因为文件有58.3M,要循环读取 while(true) { int r=fsread.Read(buffer, 0, buffer.Length); //返回本次实际读取到的字节数 //如果返回一个0时,也就意味着什么都没有读到,读取完了 if(r==0) break; fswrite.Write(buffer,0,r); } } } } } }
运行结果:
2、StreamReader类和StreamWriter类
(1)StreamReader 类
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
构造函数:
属性:
方法:
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace StreamReader类和StreamWriter类 { class Program { static void Main(string[] args) { //使用StreamReader来读取一个文本文件 using (StreamReader sr = new StreamReader(@"F:\C#projects\abc.txt",Encoding.Default)) { while (!sr.EndOfStream) { Console.WriteLine(sr.ReadLine()); //读取一行之后,在控制台打印输出 } } Console.ReadKey(); } } }
运行结果:
(2)StreamWriter类
实现 TextWriter 用于将字符写入到流中特定的编码。
构造函数:
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace StreamReader类和StreamWriter类 { class Program { static void Main(string[] args) { //使用StreamWriter来写入一个文本文件,解决乱码使用:System.Text.Encoding.Default using (StreamWriter st = new StreamWriter(@"F:\C#projects\abc.txt",true,System.Text.Encoding.Default)) { st.Write("非常好用的类1"); } Console.WriteLine("写入完成..."); Console.ReadKey(); } } }
结果: