FileStream类不是静态类,使用时需要创建对象,FileStream类既可以对文本文件进行读也可以对多媒体文件进行写,以字节数组的形式进行读和写,多用于对大文件进行读写,区别于File类的是它对文件可进行分步读写,减小内存压力,缺点是我们需要手动的关闭和释放资源,
1、FileStream的常用方法
FileStream类的构造函数;
public FileStream(string path, FileMode mode, FileAccess access);
path:
当前 FileStream 对象将封装的文件的相对路径或绝对路径。
mode:
一个常数,用于确定如何打开或创建文件。
access:
一个常数,用于确定 FileStream 对象访问文件的方式。
FileStream类的方法;
public override int Read(byte[] array, int offset, int count);
public override void Write(byte[] array, int offset, int count);
FileStream的读操作
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FileStream的常用方法
{
class Program
{
static void Main(string[] args)
{
string path =@"C:\Users\fighting man\Desktop\FileStream的使用\vs快捷键.txt" ;
FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
//三个参数(参数1读取文件的路径,参数2对文件的做什么样的操作,参数3对文件中的数据做什么样的操作)
//FileStream 用来操作字节(不是一次性读取对内存压力小适合读大文件)
try
{
//创建FileStream类的对象(路径,对文件的操作,对文本文件数据的操作)
byte[] buffer = new byte[1024 * 1024 * 1];
int r = fsRead.Read(buffer, 0, buffer.Length);//把数据读到字节数组中,返回实际读到的有效字节数
string str = Encoding.Default.GetString(buffer, 0, r);//解码到实际读到的字节数
Console.WriteLine(str);
}
finally
{
fsRead.Close();//关闭流
fsRead.Dispose();//释放流
}
Console.ReadKey();
}
}
}
FileStream的写操作并不完全覆盖原来的文件,而是用多少字节覆盖原来的文件多少内容,而File类中的写入是完全覆盖原来的文件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FileStream写数据
{
class Program
{
static void Main(string[] args)
{
string path = @"C:\Users\fighting man\Desktop\FileStream的使用\vs快捷键.txt";
//将创建文件流对象的过程写在using当中,系统会自动的帮助我们是放资源
using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
string str = "我好像不能全部覆盖源文件中的数据";
byte[] buffer = Encoding.Default.GetBytes(str);
fsWrite.Write(buffer,0,buffer.Length);//无返回值,以字节数组的形式写入数据
}
Console.WriteLine("写入ok");
Console.ReadKey();
}
}
}
FileStream分步读写大文件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FilestreamMultiMediaCope
{
class Program
{
static void Main(string[] args)
{
//先读取要复制的多媒体文件
string source = @"C:\Users\fighting man\Desktop\FileStream的使用\高数视频.flv";
string target = @"C:\Users\fighting man\Desktop\FileStream的使用\new.flv";
CopeFile(source,target);
Console.WriteLine("完成");
Console.ReadKey();
}
public static void CopeFile(string str,string str1)
{
//首先创建一个读取流的对象
using(FileStream fsRead = new FileStream(str,FileMode.OpenOrCreate,FileAccess.Read))
{
//然后创建一个写入流的对象
using(FileStream fsWrite = new FileStream(str1,FileMode.OpenOrCreate,FileAccess.Write))
{
byte[] buffer = new byte[1024 * 1024 * 5];//创建一个5M的字符数组用于存放读到的数据
//数据比较大我们应该用循环来读
while (true)
{
int r = fsRead.Read(buffer, 0, buffer.Length);//把数据读到字节数组中,返回实际读到的字节数
//如果返回0什么也没读取到,读取完了
if (r == 0)
{
break;
}
fsWrite.Write(buffer,0,r);
}
}
}
}
}
}