不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
使用MemoryStream与FileStream
编辑:dnawo 日期:2009-09-15
编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象和文件是一一对应关系。
在.NET中,使用抽象基类System.IO.Stream代表流,它提供Read和Write两个方法。由于数据流的有序性,因此流对象还有一个读写指针,为此,Stream类还有一个Seek方法用于移动读写指针。
·FileStream对象的数据来自文件,而MemoryStream对象的数据来自内存缓冲区。这两个类都继承自Stream类。
·MemoryStream的数据来自内存中的一块连续区域,这块区域称为"缓冲区(Buffer)"。可以把缓冲区看成一个数组,每个数组元素可以存放一个字节的数据。
在创建MemoryStream对象时,可以指定缓冲区的大小,并且可以在需要的时候更改。
内存流的基本使用方法:
内存流的Length属性代表了其中存放的数据的真实长度,而Capacity属性则代表了分配给内存流的内存空间大小。
可以使用字节数组创建一个固定大小的MemoryStream,
这时,无法再设置Capacity属性的大小。
还可以创建只读的内存流对象。
FlieStream用于存取文件。
创建文件并写入内容:
打开文件并读取内容:
如果一个程序退出了,但它打开的文件没有被关闭,将导致其他程序无法修改或删除此文件。
在.NET中,使用抽象基类System.IO.Stream代表流,它提供Read和Write两个方法。由于数据流的有序性,因此流对象还有一个读写指针,为此,Stream类还有一个Seek方法用于移动读写指针。
·FileStream对象的数据来自文件,而MemoryStream对象的数据来自内存缓冲区。这两个类都继承自Stream类。
·MemoryStream的数据来自内存中的一块连续区域,这块区域称为"缓冲区(Buffer)"。可以把缓冲区看成一个数组,每个数组元素可以存放一个字节的数据。
在创建MemoryStream对象时,可以指定缓冲区的大小,并且可以在需要的时候更改。
复制内容到剪贴板
程序代码

//字节数组
byte[] buffer = new byte[600];
//填充字节数组
private void CreateExampleData()
{
for (int i = 0; i < 600; i++)
{
//byte类型的数最大不能超过255,用256取模实现
buffer[i] = (byte)(i % 256);
}
}
byte[] buffer = new byte[600];
//填充字节数组
private void CreateExampleData()
{
for (int i = 0; i < 600; i++)
{
//byte类型的数最大不能超过255,用256取模实现
buffer[i] = (byte)(i % 256);
}
}
内存流的基本使用方法:
复制内容到剪贴板
程序代码

private void OnTestMemory()
{
//创建测试数据
CreateExampleData();
//创建内存流对象,初始分配50字节的缓冲区
MemoryStream mem = new MemoryStream(50);
//向内存流中写入字节数组的所有数据
mem.Write(buffer, 0, buffer.GetLength(0));
MessageBox.Show("写入数据后的内存流长度:" + mem.Length.ToString());
MessageBox.Show("分配给内存流的缓冲区大小:" + mem.Capacity.ToString());
mem.SetLength(550);
MessageBox.Show("调用SetLength方法后的内存流长度:" + mem.Length.ToString());
mem.Capacity = 620;//此值不能小于Length属性
MessageBox.Show("调用Capacity方法后缓冲区大小:" + mem.Capacity.ToString());
//将读写指针移到距流开头10个字节的位置
mem.Seek(10, SeekOrigin.Begin);
MessageBox.Show(mem.ReadByte().ToString());
mem.Close();
}
{
//创建测试数据
CreateExampleData();
//创建内存流对象,初始分配50字节的缓冲区
MemoryStream mem = new MemoryStream(50);
//向内存流中写入字节数组的所有数据
mem.Write(buffer, 0, buffer.GetLength(0));
MessageBox.Show("写入数据后的内存流长度:" + mem.Length.ToString());
MessageBox.Show("分配给内存流的缓冲区大小:" + mem.Capacity.ToString());
mem.SetLength(550);
MessageBox.Show("调用SetLength方法后的内存流长度:" + mem.Length.ToString());
mem.Capacity = 620;//此值不能小于Length属性
MessageBox.Show("调用Capacity方法后缓冲区大小:" + mem.Capacity.ToString());
//将读写指针移到距流开头10个字节的位置
mem.Seek(10, SeekOrigin.Begin);
MessageBox.Show(mem.ReadByte().ToString());
mem.Close();
}
内存流的Length属性代表了其中存放的数据的真实长度,而Capacity属性则代表了分配给内存流的内存空间大小。
可以使用字节数组创建一个固定大小的MemoryStream,
复制内容到剪贴板
程序代码

MemoryStream mem = new MemoryStream(buffer);
这时,无法再设置Capacity属性的大小。
还可以创建只读的内存流对象。
复制内容到剪贴板
程序代码

MemoryStream mem = new MemoryStream(buffer,false);
FlieStream用于存取文件。
创建文件并写入内容:
复制内容到剪贴板
程序代码

//创建一个新文件
FileStream fsForWrite = new FileStream("test.data", FileMode.Create);
try
{
//写入一个字节
fsForWrite.WriteByte(100);
CreateExampleData();
//将字节数组写入文件
fsForWrite.Write(buffer, 0, buffer.GetLength(0));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
//关闭文件
fsForWrite.Close();
}
FileStream fsForWrite = new FileStream("test.data", FileMode.Create);
try
{
//写入一个字节
fsForWrite.WriteByte(100);
CreateExampleData();
//将字节数组写入文件
fsForWrite.Write(buffer, 0, buffer.GetLength(0));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
//关闭文件
fsForWrite.Close();
}
打开文件并读取内容:
复制内容到剪贴板
程序代码

private void ReadFromFile()
{
FileStream fsForRead = new FileStream("test.data", FileMode.Open);
try
{
//读入一个字节
MessageBox.Show("文件的第一个字节为:" + fsForRead.ReadByte().ToString());
//读写指针移到距开头10个字节处
fsForRead.Seek(10, SeekOrigin.Begin);
byte[] bs = new byte[10];
//从文件中读取10个字节放到数组bs中
fsForRead.Read(bs, 0, 10);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
fsForRead.Close();
}
}
{
FileStream fsForRead = new FileStream("test.data", FileMode.Open);
try
{
//读入一个字节
MessageBox.Show("文件的第一个字节为:" + fsForRead.ReadByte().ToString());
//读写指针移到距开头10个字节处
fsForRead.Seek(10, SeekOrigin.Begin);
byte[] bs = new byte[10];
//从文件中读取10个字节放到数组bs中
fsForRead.Read(bs, 0, 10);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
fsForRead.Close();
}
}
如果一个程序退出了,但它打开的文件没有被关闭,将导致其他程序无法修改或删除此文件。
评论: 0 | 引用: 0 | 查看次数: 4511
发表评论
请登录后再发表评论!