文件流FileStram类

本节课主要学习三个内容:

创建FileStram流

读取流

写入流

文件流FileStram类,是用来实现对文件的读取和写入。FileStram是操作字节的字节数组,当提供向文件读取和写入字节的方法时,常用StramRead类或StramWrite类来完成,它们是操作字符的。

FileStream类的构造有多种形式,最简单的一种。FileStream(String path,FileMode mode);

FIleMode枚举有几种成员,用于规定如何打开或创建文件,这些成员可以联合使用。

 

枚举值 说明
Append 打开现有文件并定位至文件结尾,或创建新文件
Create 创建新文件,如存在,它将被改写
CreateNew 创建新文件,如存在,将引发异常
Open 打开现有文件
OpenorCreat 如文件存在,打开;如不存在,创建新文件
TrunCate 打开现有文件,文件一旦被打开,将被截断为0字节大小

在不使用FileAccess枚举参数的版本中,默认值使用的是ReadWrite

使用场合:如果需要以其他方式打开文件,就要附加一个参数,这个参数为FileAccess参数。

FIleStream(string path,FileMode mode,FileAccess access);

参数:有三个枚举值--只读模式(Read)、读/写模式(ReadWrite)、只写模式(Wite)。

作用:基于用户的权限级别改变用户对文件的访问权限。

实例:

  桌面上51zxw文件夹中51zxw.txt,先读出其中的内容,然后在写入

 

File类和FIleInfo类提供了OpenRead()方法和OpenWrite方法用于创建FIleStream对象,OpenRead()方法用于以只读方式访问文件,OpenWrite方法则允许对文件进行写入内容操作。

 

如果利用File类及FileInfo类以只读方式访问桌面上“D:\Users\Walker\Dektop\51zxw\51zxw.txt”文件,该如何进行访问?

FileStream类有三个重要方法,分别为Seek方法、Read方法、Write方法。

Seek方法用于直接在文件中查找具体的位置

FIleStream类维护内部文件指针,这会指向文件中的位置。当打开文件时,默认指向文件的开始位置,这里的开始计算位置就是指的这个位置,它是一个SeekOrigin枚举,有3个成员,分别为Begin、Cruuent和End。移动距离是相对开始计算的位置而言的,它是以字节为单位,如下面代码将会使文件指针移动到文件开始中的第20个字节的位置。

 

            byte [] mybyte=new byte[100];
            char [] mychar=new char[100];
            string path = @"C:\Users\Administrator\Desktop\51zxw.txt";
            try
            {
                //定义文件流类 (对51zxw.txt ,文件操作模式打开或者新建,文件访问读和写)
                FileStream mystream = new FileStream(path,FileMode.OpenOrCreate,FileAccess.ReadWrite);
                //FIle 1种
                 //FileStream f1 = File.OpenRead(path);
                //FileInfo 2种
                 //FileInfo fs2 = new FileInfo(path);
                //文件流。查找(从0开始查找)
                mystream.Seek(0,SeekOrigin.Begin); //查找的同时写进缓冲区
                //文件流.读取(读取到mybyte 从0开始,到mybyte总长度)FileStream 是字节流 必须用Byte[] 数组
                mystream.Read(mybyte,0,mybyte.Length);
                //定义转码类 字节转换字符 =转换后。UTF8格式.将以编码的字节转换字符序列
                Decoder dc = Encoding.UTF8.GetDecoder();
                //字节数组解码成字符(mybyte,0开始,mybyte长度,解码成字符,清空解码器状态)
                dc.GetChars(mybyte,0,mybyte.Length,mychar,0);

                Console.WriteLine(mychar);
                Console.WriteLine("完成读取");

                //赋值mychar
                mychar = "努力学习天天向上".ToCharArray();
                //转码 =转换后.UTF8格式.将字符串解码字节序列
                Encoder mydc = Encoding.UTF8.GetEncoder();
                //字符数组解码成字节(要解码的,0开始,mychar长度,产生的字节数组,0,true)
                mydc.GetBytes(mychar,0,mychar.Length,mybyte,0,true);
                //文件流。查找(0开始);
                mystream.Seek(0,SeekOrigin.Begin);
                //文件流.写入(写入到mybyte,0开始,mybyte.总长度)
                mystream.Write(mybyte,0,mybyte.Length);
                //关闭文件数据流
                mystream.Close();
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
    }

 

 

实例

 

 class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //读取
                byte[] mybute = new byte[100];
                char[] mychar = new char[100];
                string path = @"C:\Users\Administrator\Desktop\51zxw.txt";

                FileStream mystr = File.OpenRead(path);  
                mystr.Seek(0, SeekOrigin.Begin);
                mystr.Read(mybute, 0, mybute.Length);
                Decoder dc = Encoding.UTF8.GetDecoder();
                dc.GetChars(mybute, 0, mybute.Length, mychar, 0);
                Console.WriteLine(mychar);


                //写入
                mychar = "你好世界,世界你好".ToCharArray();
                Encoder co = Encoding.UTF8.GetEncoder();
                co.GetBytes(mychar, 0, mychar.Length, mybute, 0, true);
                mystr.Seek(0, SeekOrigin.Begin);//写入内部缓存区
                mystr.Write(mybute, 0, mybute.Length);

                mystr.Close();
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            }
          

            Console.Read();

         
            


        }
    }

 

上述代码执行后 read可以读取,写入是不行的,要想写入 FileStream mystr=new FileStream(path,FileMode.OpenOrCreate,FileAccess.ReadWrite); 其中FileAccess 也可以不写,默认是读写功能

 

posted @ 2018-03-29 14:26  WhiteSpace  阅读(321)  评论(0编辑  收藏  举报