• 文件流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:UsersWalkerDektop51zxw51zxw.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:UsersAdministratorDesktop51zxw.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:UsersAdministratorDesktop51zxw.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 也可以不写,默认是读写功能

  • 相关阅读:
    返回三级联动的JSON数据
    返回三级联动的JSON数据
    python3访问map
    第十八讲、中介者模式
    第十七讲、命令模式
    第十六讲、模板方法模式
    第十五讲、组合模式
    第十四讲、享元模式
    第十三讲、装饰器模式
    第十二讲、桥接模式
  • 原文地址:https://www.cnblogs.com/xiaowie/p/8669618.html
Copyright © 2020-2023  润新知