必威体育Betway必威体育官网
当前位置:首页 > IT技术

c#语言------------FileStream类的基本使用

时间:2019-06-17 06:45:16来源:IT技术作者:seo实验室小编阅读:81次「手机版」
 

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

相关阅读

文件流FileStream技术出现的理由漫谈

还是废话不多说,一般我们读写文本通过File类中的几个方法是可以满足我们的需求的,如下 File.ReadAllLines("文件路径") 这个方

C#:实体框架EF(entity framework)

本文来自:http://www.cnblogs.com/xuf22/articles/5513283.html一、什么是Entity Framework微软官方提供的ORM工具,ORM让开发人员节

C# EventHandler委托事件小结

最近遇到一个委托的问题,+=这个符号,哇,真的是头皮发麻,以为是运算符,根本不知道是委托 -。-!! 看下图: 后面查了以后原来这种用法真的很

C#绘制GPS星空图

搜了一下,网上关于C#绘制星空图的代码比较少,且把我自己做的一个简单的C#星空图控件代码贴出来,供大家一起交流…… 首先是Satellite

C#--反汇编工具ildasm.exe

通用中间语言(Common Intermediate Language,简称IL)是一种属于通用语言架构和 .NET 框架的的人类可读的编程语言。目标为 .NET 框架

分享到:

栏目导航

推荐阅读

热门阅读