操作流对象
不管是MemoryStream还是FileStream,都是以字节为读写数据的基本单位。而许多情况下应用程序都是以字符(占两个字节)、数字(比如int,占4个字节)、String(若干字符的集合)来处理数据的。因此.NET提供了BinaryReader和BinaryWriter、StreamReader和StreamWriter来解决这个问题。
1. BinaryReader和BinaryWriter:
这两个类主要用于向流中读取和写入各种基本数据类型的数据。
以下代码创建文件并写入一些数据:
以下代码按原先写入的顺序读取数据:
BinaryWriter只能把字符和字符数组写入流中,却没有提供写入字符串的方法,这个功能由StreamWriter类实现。
以下代码创建一个StringData.txt,并向其中写入两个字符串:
以下代码是从文件中分两次读取数据:
1. BinaryReader和BinaryWriter:
这两个类主要用于向流中读取和写入各种基本数据类型的数据。
以下代码创建文件并写入一些数据:
private void BinaryWriteToFile()
{
//创建一个文件流对象
FileStream fs = new FileStream("test2.data",FileMode.Create);
//将文件流对象作为参数构造一个BinaryWriter对象
BinaryWriter bw = new BinaryWriter(fs);
//写入int
bw.Write(100);
//写入字符'A'
bw.Write('A');
//写入double
double d = 200.99;
bw.Write(d);
//写入bool
bw.Write(true);
//关闭自身(隐含关闭它关联的FileStream)
bw.Close();
}
BinaryWriter对象不能独立存在,它必须依托FileStream或MemoryStream对象。{
//创建一个文件流对象
FileStream fs = new FileStream("test2.data",FileMode.Create);
//将文件流对象作为参数构造一个BinaryWriter对象
BinaryWriter bw = new BinaryWriter(fs);
//写入int
bw.Write(100);
//写入字符'A'
bw.Write('A');
//写入double
double d = 200.99;
bw.Write(d);
//写入bool
bw.Write(true);
//关闭自身(隐含关闭它关联的FileStream)
bw.Close();
}
以下代码按原先写入的顺序读取数据:
private void BinaryReadFormFile()
{
//创建一个文件流对象
FileStream fs = new FileStream("test2.data",FileMode.Open);
//将文件流对象作为参数构造一个BinaryReader对象
BinaryReader br = new BinaryReader(fs);
//读入int
MessageBox.Show(br.ReadInt32().ToString());
//读入字符
MessageBox.Show(br.ReadChar().ToString());
//读入double
MessageBox.Show(br.ReadDouble().ToString());
//读入bool
MessageBox.Show(br.ReadBoolean().ToString());
//关闭自身(隐含关闭它关联的FileStream)
br.Close();
}
2. StreamReader和StreamWriter:{
//创建一个文件流对象
FileStream fs = new FileStream("test2.data",FileMode.Open);
//将文件流对象作为参数构造一个BinaryReader对象
BinaryReader br = new BinaryReader(fs);
//读入int
MessageBox.Show(br.ReadInt32().ToString());
//读入字符
MessageBox.Show(br.ReadChar().ToString());
//读入double
MessageBox.Show(br.ReadDouble().ToString());
//读入bool
MessageBox.Show(br.ReadBoolean().ToString());
//关闭自身(隐含关闭它关联的FileStream)
br.Close();
}
BinaryWriter只能把字符和字符数组写入流中,却没有提供写入字符串的方法,这个功能由StreamWriter类实现。
以下代码创建一个StringData.txt,并向其中写入两个字符串:
private void WriteStringToFile()
{
FileStream fs = new FileStream("StringData.txt",FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("合肥工业大学");
sw.WriteLine("电子商务研究所");
sw.Close();
}
{
FileStream fs = new FileStream("StringData.txt",FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("合肥工业大学");
sw.WriteLine("电子商务研究所");
sw.Close();
}
以下代码是从文件中分两次读取数据:
private void ReadStringFromFile()
{
FileStream fs = new FileStream("StringData.txt",FileMode.Open);
StreamReader sr = new StreamReader(fs);
MessageBox.Show(sr.ReadLine());
MessageBox.Show(sr.ReadLine());
sr.Close();
}
还可以用ReadToEnd方法,可以一次性地从当前读写指针所指的位置开始读到文件结尾。{
FileStream fs = new FileStream("StringData.txt",FileMode.Open);
StreamReader sr = new StreamReader(fs);
MessageBox.Show(sr.ReadLine());
MessageBox.Show(sr.ReadLine());
sr.Close();
}
private void ReadAllStringFromFile()
{
FileStream fs = new FileStream("StringData.txt",FileMode.Open);
StreamReader sr = new StreamReader(fs);
MessageBox.Show(sr.ReadToEnd());
sr.Close();
}
{
FileStream fs = new FileStream("StringData.txt",FileMode.Open);
StreamReader sr = new StreamReader(fs);
MessageBox.Show(sr.ReadToEnd());
sr.Close();
}