文件及数据流技术
原文来源:《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(); //关闭当前文件流
}
}
上一篇: C++ 命名空间namespace详解
下一篇: zabbix监控nginx状态