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

文件及数据流技术

程序员文章站 2022-07-12 19:40:30
...

原文来源:《C#从入门到精通》

数据流提供了一中向 后备存储 写入字节和从 后备存储 读取字节的方式。它是在.NET Framework中执行读写文件操作时一种非常重要的介质。

.NET Framework使用来支持读取和写入文件。

开发人员可以将视为:

一组连续的一维数据,包含开头和结尾,并且其中的游标指示了流中的当前位置

1、流操作

流中包含的数据可能来自内存、文件或TCP/IP套接字。

基本操作:
1、读取:将数据从流传输到数据结构(如:字符串或字节数组)中。
2、写入:将数据从数据源传输到流中。
3、查询:查询和修改在流中的位置。

数据结构原来是:字符串、字节数组等

2、流的类型

在.NET Framework中,流由Stream类来表示,该类构成了所有其他流的抽象类。不能直接创建Stream类的实例,但是必须使用它实现其中的一个类。

C#中有许多类型的流,但在处理文件的输入/输出(I/O)时,最重要的类型为FileStream类,它提供读取和写入文件的方式。在处理文件I/O时使用的其他流主要包括BufferedStream、CrytoStream、MemoryStream和NetworkStream等。

文本文件的写入与读取

文本文件的写入与读取主要是通过StreamWriter类和StreamReader类来实现的。

1、StreamWriter类

StreamWriter是专门用来处理文本文件的类,可以方便地向文本文件中写入字符串。同时也负责重要的转换和处理向FileStream对象写入工作。

2、StreamReader类
StreamReader是专门用来读取文本文件的类,它可以从底层Stream对象创建StreamReader对象的实例,而且也能指定编码规范参数。

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.Text == string.Empty)
    {
        MessageBox.Show("要写入的文件内容不能为空");
    }
    else
    {
        saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";        //设置保存文件的格式
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, true);
            sw.WriteLine(textBox1.Text);//向创建的文件中写入内容
            sw.Close();                 //关闭当前文件写入流
            textBox1.Text = string.Empty;
        }
    }
}

private void button2_Click(object sender, EventArgs e)
{
    openFileDialog1.Filter = "文本文件(*.txt)|*.txt";           //设置打开文件的格式
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        textBox1.Text = string.Empty;
        StreamReader sr = new StreamReader(openFileDialog1.FileName);
        textBox1.Text = sr.ReadToEnd();     //调用ReadToEnd方法读取选中文件的全部内容
        sr.Close();                         //关闭当前文件读取流
    }
}

程序的运行结果如图:
文件及数据流技术

二进制文件的写入与读取

二进制文件的写入与读取主要是通过BinaryWriter类和BinaryReader类来实现的。

1、BinaryWriter类

BinaryWriter类以二进制形式将基元类型写入流,并支持用特定编码写入字符串。

2、BinaryReader类
BinaryReader用特定的编码将基元数据类型读作二进制值。

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.Text == string.Empty)
    {
        MessageBox.Show("要写入的文件内容不能为空");
    }
    else
    {
        saveFileDialog1.Filter = "二进制文件(*.dat)|*.dat";        //设置保存文件的格式
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            FileStream myStream = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            BinaryWriter myWriter = new BinaryWriter(myStream);//使用FileStream对象实例化BinaryWriter二进制写入流对象
            myWriter.Write(textBox1.Text);//以二进制方式向创建的文件中写入内容
            myWriter.Close();//关闭当前二进制写入流
            myStream.Close();//关闭当前文件流
            textBox1.Text = string.Empty;
        }
    }
}

private void button2_Click(object sender, EventArgs e)
{
    openFileDialog1.Filter = "二进制文件(*.dat)|*.dat";           //设置打开文件的格式
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        textBox1.Text = string.Empty;
        FileStream myStream = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.ReadWrite);
        BinaryReader myReader = new BinaryReader(myStream);//使用FileStream对象实例化BinaryReader二进制写入流对象
        if (myReader.PeekChar() != -1)
        {
            textBox1.Text = Convert.ToString(myReader.ReadInt32());
        }
        myReader.Close();                         //关闭当前二进制写入流
        myStream.Close();                         //关闭当前文件流
    }
}