zoukankan      html  css  js  c++  java
  • 文件流操作

    来源:http://blog.sina.com.cn/s/blog_5d2e69770101e4gm.html

    操作文件专用流System.IO命名空间下的Filestream;  

    字符/字节:字符是表现出来的,字节的计算机内存的。如:“我”这个字直接表现为1个字符,如字符串string就是这个意思;但是在计算机内存中则是2个字节,如字节数组byte[],只有英文和数字才是一个字节。

    在读写文件的过程中,Filestream只可以进行以字节为单位原始数据流进行读写操作

    一. FileStream详解

    基本格式:FileStream(string filename, FileMode mode, FileAccess access); 参数的意思(文件名,文件模式,操作模式)

    例:FileStreamfs=new FileStream(“c:\tab.txt”,FileMode.OpenOrCreate,FileAccess.Read);

    文件名:“c:\tab.txt”;

    文件模式:FileMode类的属性

      FileMode.Create       创建文件,之前存在同名的文件将被毁掉
      FileMode.CreateNew     创建新文件,这个文件之前不存在
      FileMode.Open         打开已经存在的文件
      FileMode.OpenOrCreate   打开文件如果存在,否则创建新文件
      FileMode.Truncate       打开以存在的文件,将它的内容清除掉
      FileMode.Append      以追加的形式将数据写入到文件的最后

    操作模式:FileAccess类的属性

      FileAccess.Write      只写
      FileAccess.Read      只读
      FileAccess.ReadWrite      读写

    例:

    1. (FileStream fs1 = File.Open("c:\test.txt", FileMode.Open));  --打开

    FileMode.Open 直接用FileStream类打开文件c:\test.txt",

    2. (FileStream fs2 = File.Open("c:\test.txt", FileMode.Append, FileAccess.Write));  --追加写入

    FileMode.Append,以追加的方式打开文件"c:\test.txt",将某些内容写到"c:\test.txt"里.

    3.(FileStream fs3 =File.Open("c:\test.txt", FileMode.Truncate, FileAccess.ReadWrite, FileShare.Read)).  --清空再写入

    FileMode.Truncate的意思是将文件打开清空里面的内容后再对文件进行操作..

    4. FileStream MyFileStream1 = new FileStream(@"c:Testing.txt", FileMode.Create);  --创建可读写文件

    这个方法的意思是创建一个可以读写的文件,并且可以允许其他人读取文件的内容.

    流/Stream的方法和属性

    1.方法

    void Close() 关闭流
    void Flush() 清理流中的内容
    int ReadByte() 返回一个整数表示输入的字节数,如果没有数据返回-1
    int Read(byte[ ] buf,int offset, int numBytes) 将numBytes个字节读入到byte[ ]的以offset为,起始位置,返回读入成功的字节数
    2. 属性
    Long Seek(long offset,SeekOrigin origin) 将当前位置定位到以origin为初始位置以后的offset处.
    void WriteByte(byte b) 将单个字节写入到一个输出流.
    void Write(byte[ ] buf,int offset, int numBytes) 写入byte[ ] buf中从offset开始的numBytes个字节.
    bool CanRead 是否可读
    bool CanSeek 是否支持寻址
    bool CanWrite 是否可以写入数据
    long Length 流的长度
    long Position 流的当前位置.

    //----------------------------------------------------------------------------------------------------------------------------------//

    StreamReader/ StreamWriter可以进行以字符为单位的数据读写操作

    负责向文件中读数据

    用StreamReader的构造函数:

      1. StreamReader  sr=new StreamReader (Stream);   ---从文件流中读取:Stream可以是Filestream;

          FileStream filest = new FileStream(@"c:abc.txt", FileMode.Open, FileAccess.ReadWrite);

          StreamReader sr = new StreamReader(filest);   //或者指定编码StreamReader sr = new StreamReader(filest,Encoding.GetEncoding("gb2312"));

      2. StreamReader  sr=new StreamReader (String);   --从文件地址中读取:String为指定的文件名初始化 StreamReader 类的新实例。

          StreamReader another = new StreamReader(@"c:abc.txt");

    完整操作例子:

    FileStream filest = new FileStream(@"c:abc.txt", FileMode.Open, FileAccess.ReadWrite);

    StreamReader sr = new StreamReader(filest);

    string strLine = sr.ReadLine();//读取文件中的一行

    while(strLine!=null)//判断是否为空,表示到文件最后一行了

    {

      strLine = sr.ReadLine();  --一行一行读,可控制

        //string x =sr.ReadToEnd()   --一次性读取完成

    }

    sr.Close();//关闭流

    filest.Close();

    负责向文件中写数据

    StreamWriter

      1. StreamWriter  sr=new StreamWriter (Stream);   Stream可以是Filestream;     

          FileStream filest = new FileStream(@"c:abc.txt", FileMode.Open, FileAccess.ReadWrite);

          StreamWriter sw = new StreamWriter (filest); //或者指定编码StreamReader sr = new StreamReader(filest,Encoding.GetEncoding("gb2312"));

      2. StreamWriter  sr=new StreamWriter (String);   String为指定的文件名初始化StreamWriter 类的新实例。    

          StreamWriter another = new StreamWriter (@"c:abc.txt");

    完整例子.

    FileStream filewriter = new FileStream(@"C:abc.txt", FileMode.Append, FileAccess.Write);      --以追加的方式打开文件,并进行写入操作.

    StreamWriter sw = new StreamWriter(filewriter); 构造函数;

    for (char mychar = 'a'; mychar <= 'z'; mychar++)

    {

      sw.Write(mychar);//将从a—z26个小写字母写入文件中,就是直接写入字符串

    }

    sw.Close();

    filewriter.Close();

    另一种列子:

    using是为了在使用完成后自动释放不使用using 的实例:

     1. FileStream fs = File.Open("文件名.扩展名", FileMode.Create, FileAccess.Write);
    StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("gb2312"));
    sw.WriteLine("要写入的一行字符串".Replace(" "," "));
    sw.Close();
    fs.Close();

    2. FileStream fs = File.Open("文件名.扩展名", FileMode.Open, FileAccess.Read);
    StreamReader sr=new StreamReader(fs, Encoding.GetEncoding("gb2312"));
    string line=sr.ReandLine();
    sr.Close();
    fs.Close();

    //----------------------------------------------------------------------------------------------------------------------------------//

     其他流

    MemoryStream 内存流 和 NetworkStream 网络流
    1. NetworkStream ns = new NetworkStream();
    2. MemoryStream ms = new MemoryStream();

    //----------------------------------------------------------------------------------------------------------------------------------//

  • 相关阅读:
    【纯水题】POJ 1852 Ants
    【树形DP】BZOJ 1131 Sta
    【不知道怎么分类】HDU
    【树形DP】CF 1293E Xenon's Attack on the Gangs
    【贪心算法】CF Emergency Evacuation
    【思维】UVA 11300 Spreading the Wealth
    【树形DP】NOI2003 逃学的小孩
    【树形DP】BZOJ 3829 Farmcraft
    【树形DP】JSOI BZOJ4472 salesman
    【迷宫问题】CodeForces 1292A A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/it-xcn/p/6089415.html
Copyright © 2011-2022 走看看