设为首页收藏本站language 语言切换
查看: 1273|回复: 0
收起左侧

实例讲解.NET中的流处理

[复制链接]
发表于 2010-2-25 10:31:51 | 显示全部楼层 |阅读模式
<p >“流”是字节序列的抽象概念,或者说是计算机在处理文件或数据时产生的二进制序列。下面我们将通过4个简单的例子来学习使用.net中的流类实现对文件的操作。<p >在学习这4个简单的例子前我们有必要对.net中的流进行一个简单的介绍。<p >大家都知道“流”的英文是“Stream”,所以在.net中也就是直接用的Stream来表示流类。Stream是所有流的抽象基类。一般来说是不会直接使用Stream 类的,因为它提供的功能并不强大。通常的方法是使用它的派生类(有些书称为子代类),这些派生类中使用的最多的是文件流类,对于文件流来说它大致包含了文件的建立,文件夹的建立,文件的转移,文件的读写这4中功能,在下面的内容中我们将学会如何实现这4中功能。<p >在文件流类中最重要的是Read 和 Write 方法,这两个方法是完成文件读写所必须的。在完成对文件的读写访问后一定要记得调用 Close将流关闭,否则将会出现当从其他程序访问此文件时系统将提示文件无法访问之类的错误信息。<p >通过上面的简单介绍,我们已经大致对流有了一个简单的了解。下面我们就来学习这4个编程例子。<p >这4个例子分别是:通过流实现本地计算机中的文件转移,通过流实现计算机中文件的网络转移或称为网络文件传输,读写文本文件,读写二进制文件。<p >添加6个Butto按钮并将这几个Button控件并设置属性如下表所示:<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_cmuwgu270713.gif"></center><p >添加4个文本框控件,并将4个文本框的“Text”设置为空。<p ><B>示例一 本地文件转移</b><p >本示例将任意文件进行流化处理后,在指定的位置产生一个相同文件的副本,即实现文件的拷贝功能。<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>rivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  FileStreamL()‘实现文件的拷贝功能End Sub      Sub FileStreamL()        Dim fileinf As New System.IO.FileInfo(&quot;c:\dd.doc&quot;)‘实例化FileInfo类        Dim byt(fileinf.Length() - 1) As Byte‘获得原始文件的大小        Dim files As New System.IO.FileStream(&quot;c:\dd.doc&quot;, IO.FileMode.Open, IO.FileAccess.ReadWrite)‘实例化FileStream类        Dim filesw As New System.IO.FileStream(&quot;c:\kp.doc&quot;,IO.FileMode.OpenOrCreate)‘实例化FileStream类,并建立一个空的新文件        files.Read(byt, 0, byt.Length)‘读原文件内容到byt数组中        filesw.Write(byt, 0, byt.Length)‘将byt数组的内容写到新文件中        files.Close()‘关闭流        filesw.Close()‘关闭流End Sub</ccid_code></pre></td></tr></table></ccid_nobr><p >程序说明:在这段代码中我们创建了一个FileStreamL过程,在这个过程中首先声明FileInfo类利用此类获的原始文件的大小然后在通过声明两个FileStream类,第一个是用来对原始文件进行流读操作,即将其数据读入内存,并保存在Byt数组中。第二个FileStream类是用来将保存在Byt数组中的数据写入到指定的新文件中,本代码的原始文件是C盘中的dd.doc文件,新文件是C盘中的“kp.doc”文件。<p >本代码括号中的参数在MSDN中都有详细的解释,这里就不在讨论了。<p ><B>示例二  网络文件的转移</b><p >本示例将任意文件进行流化处理后,在局域网的指定计算机中产生一个相同文件的副本,即实现文件的网络拷贝功能。<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>rivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        FileStreamN()    End Sub    Sub FileStreamN()        Dim fileinf As New System.IO.FileInfo(&quot;c:\dd.doc&quot;)        Dim byt(fileinf.Length() - 1) As Byte        Dim files As New System.IO.FileStream(&quot;c:\dd.doc&quot;, IO.FileMode.Open, IO.FileAccess.ReadWrite)        Dim filesw As New System.IO.FileStream(&quot;\\192.168.0.99\c\kp.doc&quot;, IO.FileMode.OpenOrCreate)‘在要目标机上建立一个空的新文件        files.Read(byt, 0, byt.Length)        filesw.Write(byt, 0, byt.Length)        files.Close()        filesw.Close()End Sub</ccid_code></pre></td></tr></table></ccid_nobr><p >程序说明:这段代码和前面的唯一不同是第二个FileStream中建立新文件的位置,在这里笔者使用的是:“IP地址\共享文件名\新文件名”的格式来实现文件的拷贝。这里需要注意一点是:在指定的局域网内的计算机中的共享文件夹中要建立新的文件必须具有写的权限。这可以在“共享文件”对话框中设置。<p ><B>示例三   读写文本文件</b><p >在textstreamWrite过程中通过File类建立一个文本文件,然后使用StreamWriter类将文本框中的文字写到建立的文本文件中。在textstreamread过程中利用File类打开刚才建立的文本文件,并使用StreamReader类读取这个文本文件的内容,将它显示在文本框中。<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>Sub textstreamWrite()        Dim txtstw As System.IO.StreamWriter =System.IO.File.CreateText(&quot;c:\pp.txt&quot;)        txtstw.Write(TextBox1.Text)‘将文本框中文字写入文本文件中        txtstw.Close()End Sub   Sub textstreamread()        Dim txtstr As System.IO.StreamReader = System.IO.File.OpenText(&quot;c:\pp.txt&quot;)        TextBox2.Text = txtstr.ReadToEnd()‘读取文本文件的内容到文本框中        txtstr.Close()    End Sub    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click        textstreamWrite()    End Sub       Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click        textstreamread()End Sub</ccid_code></pre></td></tr></table></ccid_nobr><p >程序说明:在本代码中使用File类返回的流对象声明StreamWriter和StreamReader类,这两个类是专门用来读写文本文流的类。然后使用Write和ReadToEnd方法来写入和读出文本文件的内容。<p ><B>示例四  二进制文件流的读写</b><p >在bitstreamwrite过程中通过FileStream类建立一个数据文件,然后使用BinaryWriter类将文本框中的文字写到建立的文本文件中。在bitstreamread过程中利用FileStream类打开刚才建立的数据文件,并使用BinaryReader类读取这个数据文件的内容,将它显示在文本框中。<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>Sub bitstreamwrite()        Dim filestr As New System.IO.FileStream(&quot;c:\ss.data&quot;, IO.FileMode.OpenOrCreate)        Dim bitsw As New System.IO.BinaryWriter(filestr)        bitsw.Write(TextBox3.Text)‘将文本框的内容写入数据文件中        bitsw.Close()        filestr.Close()    End Sub    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click bitstreamwrite()    End Sub    Sub bitstreamread()        Dim filestr As New System.IO.FileStream(&quot;c:\ss.data&quot;, IO.FileMode.OpenOrCreate)        Dim bitsw As New System.IO.BinaryReader(filestr)        TextBox4.Text = bitsw.ReadString()‘读去数据文件内容到文本框中        bitsw.Close()        filestr.Close()    End Sub    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click bitstreamread()End Sub</ccid_code></pre></td></tr></table></ccid_nobr><p ><p >程序说明:在本代码中使用FileStream类来建立和读取数据文件,然后使用BinaryWriter来将文本框中的文字写入数据文件中,然后在从BinaryReader类将数据文件中的内容读取出来显示在文本框中。<p >总结:本文通过4个例子讲解了.net中的流对象的编程基础。其实对于流对象来说,它的使用都是和文件相结合的。比如本文的例子中每一个流对象的建立都是和文件相关的,如果在你编写有关流对象的代码时发现语句中没有与文件相关的语句,那吗这些语句多数情况下是错误或不完整的。<p >运行如图:<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_7hkder270714.gif"></center><p ><B><center>小编说话:如果你想阐述自己的观点,请在下面的“发表评论”中发言</center></b><p >                                 <p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 18:16 , Processed in 0.063747 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表