欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#流类FileStream学习使用笔记

程序员文章站 2023-12-01 15:49:10
static void main(string[] args) { //创建filestream对象需要指定 文件名,打开模式,访问...
static void main(string[] args)
      {
        //创建filestream对象需要指定 文件名,打开模式,访问模式,共享模式
  //1.调用本身的构造函数创建流
        filestream fs1 = new filestream(@"f:\1.txt", filemode.open, fileaccess.readwrite,fileshare.readwrite);
        //2.利用file类或者fileinfo类的open方法
  //filestream fs2 = file.open(@"f:\1.txt", filemode.open, fileaccess.read);
        ////3.利用file类或者fileinfo类的create方法创建
        //filestream fs3 = file.create(@"f:\1.txt");//filemode.create,fileaccess.write
       ////4.利用file类或者fileinfo类的openread方法创建
       //filestream fs4 = file.openread(@"f:\1.txt");//filemode.open, fileaccess.read
       ////5.利用file类或者fileinfo类的openwrite方法创建
       //filestream fs5 = file.openwrite(@"f:\1.txt");//filemode.open,fileaccess.write
 //inserttext(fs1, "你好,我是菜鸟rohelm.x!");//这里我要找一个可读可写共享的流做实验
 //fs1.close();//虽然这里是fileshare.readwrite模式,但是任然需要附加权限,所以释放流才可解除文件的占用状态   
 // console.writeline( file.readalltext(@"f:\1.txt"));
      console.writeline(readstream(fs1));
       console.readkey();
     }
 
 //写入流的过程是编码的过程,即将一组unicode字符转换成一个字节序列
     public static void inserttext(filestream fs, string str)
     {
       byte[] codes = new utf8encoding(true).getbytes(str);//编码过程初始化 utf8encoding 类的新实例
 //@此处可以是看做流中的存储模式
       fs.write(codes, 0, codes.length);//写入流
     }
     //读取流的过程是一个解码的过程,也就是从流中读取字节序列并按照编码规则还原为unicode字符
     public static string readstream(filestream fs)
     {
       stringbuilder str = new stringbuilder();
       byte[] b = new byte[fs.length];//创建一个可以存放流的字节序列
       utf8encoding utf = new utf8encoding(true);//创建一个utf8encoding实例,指定标记顺序
       while (fs.read(b, 0, b.length) > 0)//循环读取流中的字节放入指定的字节序列
       {
         str.append(utf.getstring(b));//解码过程
       }
       fs.close();
       return str.tostring();
     }
   }

streamreader and streamwriter

 static void main(string[] args)
     {
       ////=================streamreader的创建=============================
 ////从文本文件读或者写的时候,首先要创建一个与文件相关联的streamwriter或streamreader对象
 ////与一种字符编码方式相关,默认指定为utf8encoding。
 ////创建方式:可以联系想一下文件流的创建
 ////1.streamreader的构造函数直接创建
       //streamreader sr1 = new streamreader(@"f:\1.txt", utf32encoding.ascii);
       ////2.利用file类或者fileinfo类的opentext方法创建
       //streamreader sr2 = file.opentext(@"f:\1.txt");//这个方法只能编码为utf8encoding
       ////3.既然要读取文本流就可以直接从filestream里读取,所以可以在此基础上创建,
 ////也可间接地利用file类或者fileinfo类相关方法创建
       //filestream f1 = new filestream(@"f:\1.txt",filemode.open,fileaccess.readwrite);
 //streamreader sr3 = new streamreader(f1);
       ////由此可推断,streamreader级可以接受文件路径创建也可以直接接受文件流创建
 ////=================writereader创建=============================
 ////1.自身构造函数直接创建
       //streamwriter sw1 = new streamwriter(@"f:\1.txt");
       ////2.利用file类或者fileinfo类的createtext和appendtext方法创建,//这个方法只能编码为utf8encoding
       //streamwriter sw2 = file.appendtext(@"f:\1.txt");
 //sw2 = new fileinfo(@"f:\1.txt").createtext();
       ////3.可以直接从filestream里读取,所以可以在此基础上创建,
 ////也可间接地利用file类或者fileinfo类相关方法创建
       //streamwriter sw3 = new streamwriter(f1);
 //filestream f2 = new fileinfo(@"f:\1.txt").open(filemode.open);
 //sw3 = new streamwriter(f2);
 //===================测试读写====================
       streamwriter sw = writetext();
       streamreader sr=new streamreader(@"f:\1.txt");
       string s = readtext(sr);
       console.writeline(s);
       console.readkey();
    }
 
     //读取方法
     public static string readtext(streamreader sr)
     {
       stringbuilder sb = new stringbuilder();
       while (!sr.endofstream)
       {
         sb.appendline(sr.readline());
      } 
       sr.close();
       return sb.tostring();
     }
     //写入方法
     public static streamwriter writetext()
     {
       using (streamwriter sw = new streamwriter(@"f:\1.txt",true))
       {
         sw.writeline(datetime.now.tostring());
         return sw;
       }
       
     }