• 文件流操作


    来源: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();

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

  • 相关阅读:
    C++函数四( 具有默认参数值的函数)
    C++函数三(内联函数和函数重载)
    C++函数二(函数的嵌套调用和递归调用)
    C++关于函数声明定义的位置
    C++函数一(标准库函数,自定义函数)
    C++扑克牌发牌游戏程序(包括C++随机数的解释)
    C++数组二(字符数组)
    C++数组一
    C++程序流程结构
    C++运算符与表达式
  • 原文地址:https://www.cnblogs.com/it-xcn/p/6089415.html
Copyright © 2020-2023  润新知