设为首页
加入收藏
联系我们
首页 基础教程 技术文档 实例分析 数 据 库 疑难杂症 ASP.NET 七夕许愿树 技术论坛
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
最新文章
 C#摄像头编程实例
 C#下用P2P技术实现点…
 Asp.net(c#)数…
 SQL Server数据…
 .NET牛人应该知道些什…
 NET牛人应该知道些什么
 SQL Server S…
 备份指定表到另一数据库
 SQLSERVER中快速…
 ASP.NET中url传…
 ASP.NET自动给UR…
 ASP.NET 2.0防…
 ASP.NET 2.0 …
 如何解决ASP.net中…
 sql server 与…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
推荐文章
 关于C#中的REF和黓认…
 读书笔记c#高级编程 委…
 【算法】C#快速排序类
 Visual C#的SQ…
 C#中调用API
 Infragistics…
 C#接口转换
 C#读取设备信息
 用.net操作word
 C# MessageBo…
 Visual C#中的数…
 雅虎公司C#笔试题,看看…
 C#.NET使用NHib…
 .net学习之运算符重载…
 Visual C# 3.…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
热门文章
 ADO.Net与ADO在…
 开发ASP.NET下的M…
 用C#+XMI技术进行U…
 什么是虚拟机?
 C#基础全接触
 C#学习第一天
 雅虎公司C#笔试题,看看…
 C#语言初级入门(1)
 C#中利用正则表达式实现…
 远程重启计算机(C#)
 用.net操作word
 什么是B/S三层?
 VB和C# 语法对比图 …
 Visual C#常用函…
 Visual C#的SQ…
使用MemoryStream与FileStream
阅读正文 文字大小:增大 减小  文字行距:增大 减小   双击自动滚屏
本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象和文件是一一对应关系。
在.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);
            }            
        }内存流的基本使用方法:
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();
        }内存流的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();
            }打开文件并读取内容:
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();        }
        }如果一个程序退出了,但它打开的文件没有被关闭,将导致其他程序无法修改或删除此文件。 

本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

中国C#技术交流QQ群:6337034  10976424  9383681  35248582  35248645
版权所有:中国C#技术学习中心 Copyright ? 2006-2008
建议浏览分辨率使用:1024*768分辨率
粤ICP备05002251号