FileStream类的基本使用

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);
                    }
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/boy_of_god/article/details/80617201
今日推荐