为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

VBNET教程-PPT课件

2018-10-02 71页 ppt 1MB 54阅读

用户头像 个人认证

北溟愚鱼

暂无简介

举报
VBNET教程-PPT课件VB.NET VB.NET程序设计实用教程 第9章 文件操作 第9章 VB.NET 的文件操作 9.1文件的相关概念 9.2 文件流的概念 9.3文件操作函数 9.4面向对象的文件操作方法 9.5 心电图数据的简单分析和波形的实现 9.1文件的相关概念 ⒈ 文件结构: 为了有效的对数据进行处理,必须以某种特定的方式存放数据,这种特定的方式称为文件结构。 文件由记录(Record)组成,一个文件含一个以上的记录,记录是由一组相关的字段(Field)组成。字段也称域,由若干个字符组成,用来表示一项数据。...
VBNET教程-PPT课件
VB.NET VB.NET程序实用教程 第9章 文件操作 第9章 VB.NET 的文件操作 9.1文件的相关概念 9.2 文件流的概念 9.3文件操作函数 9.4面向对象的文件操作方法 9.5 心电图数据的简单分析和波形的实现 9.1文件的相关概念 ⒈ 文件结构: 为了有效的对数据进行处理,必须以某种特定的方式存放数据,这种特定的方式称为文件结构。 文件由记录(Record)组成,一个文件含一个以上的记录,记录是由一组相关的字段(Field)组成。字段也称域,由若干个字符组成,用来示一项数据。字段由字符(Character)组成,字符是构成文件的最基本单位。字符可以是数字、字母、特殊符号或单一字节。 2.文件种类:根据不同的分类标准,文件可以分为不同的类型。 ⑴ 根据数据性质,可分为程序文件和数据文件。 ① 程序文件(Program File):这种文件存放的是可以由计算机执行的程序,包括源文件和可执行文件。 ② 数据文件(Data File):数据文件用来存放普通的数据。 ⑵ 根据文件的存取方式和结构,可以分为顺序文件和随机文件。 ① 顺序文件(Sequential File):顺序文件的结构比较简单,文件中的记录一个接一个地存放。 顺序文件不能灵活的对数据进行添加、删除和修改操作,因此适合于有一定规律且不经常修改的数据。其优点在于占用空间少,容易使用。 ② 随机存取文件(Random Access Tile):又称直接存取文件,简称随机文件或直接文件,可按任意次序读写文件(按记录号访问记录) ,每个记录的长度必须相同。 在随机文件中可以同时进行读、写操作,因此能快速地查找和修改每个记录。其主要优点是数据的存储较为灵活、方便、快捷。对数据的添加、删除和修改容易。缺点在于占用的空间较大,数据组织结构较复杂。 ⑶ 根据数据的编码方式,可以分为ASCII文件和二进制文件 ① ASCII文件:又称文本文件,它以ASCII方式保存文件。这种文件可以用字处理软件建立和修改(必须按纯文本文件保存)。 ② 二进制文件(Brinary File):这种文件是字节的集合,允许程序按所需的任何方式组织和访问数据。二进制文件不能用普通的字处理软件编辑,占空间较小。 9.2 文件流的概念 文件流的访问操作都是通过.Net中System.IO模型来实现。表8-1列出了System.IO名称空间中常用的类。 对流的操作有三类,如下: (1)读取:可以从流读取。读取是从流到数据结构(如字节数组)的数据传输。 (2)写入:可以向流写入。写入是从数据源到流的数据传输。 (3)定位:流可以支持查找。查找是对流内的当前位置进行查询和修改。 VB.NET框架具有强大的文件处理功能,表8-2列出了完成流文件操作的System.IO.File类中常用的成员函数。 1、顺序文件的操作 (1)顺序文件创建 例如用打开文件对话框OpenFileDialog1的FileName属性获得文件的路径,然后用File类的OpenText方法建立一个StreamReader类的对象,代码如下: Dim dread as StreamReader=File.OpenText(OpenFileDialog1.FileName) 下面代码给出用StreamReader类的构造函数建立StreamReader类的对象的方法: Public sr1 as StreamReader= New StreamReader(“文本文件的完整路径”) Public sr2 as StreamReader= New StreamReader (“文本文件的完整路径”,Encoding) 表8-3列出StreamReader类的常用方法。 (2)顺序文件的读取和写入 例如: Dim bb As StreamReader = File.OpenText("c:\ File1.txt") X=bb.ReadLine 代码中用File对象的OpenText方法打开文本文件,文本文件打开时被转换成文件流,存放到StreamReader对象实例bb中,然后用ReadLine方法对文件流进行读取。 例8-1:用StreamReader类从文本文件读取文本。 Imports System Imports System.IO Class Test Public Shared Sub Main() Try ' 创建一个StreamReader类对象读取文本 Dim sr as StreamReader = New StreamReader("TestFile.txt") Dim line as String ' 一行行读取文本内容,直到文本结束 Do line = sr.ReadLine() Console.WriteLine(Line) Loop Until sr.Peek=-1 sr.Close() Catch E as Exception '输出出错信息. Console.WriteLine("The file could not be read:") Console.WriteLine(E.Message) End Try End Sub End Class (3)文件的关闭 file.close (4)文件的删除 file.delete(文件存放位置) 2、二进制文件的操作 创建文件如下所示: Dim BR As New IO.BinaryReader(IO.File.OpenRead(path)) Dim BW As New IO.BinaryWriter(IO.File.OpenWrite(path)) 例如:假设BW是一个已经初始化过的BinaryWriter对象,表示如何写一个字符串、整数、双精度数字到文件: BW.WriteLine("A String") BW.WriteLine(12345) BW.WriteLine(123.456789999999) 读回数据的时候,必须选择BinaryReader合适的Read方法: Dim s As String = BR.ReadString() Dim i As Int32 = BR.ReadInt32() Dim dbl As Double = BR.ReadDouble() 要对文件夹操作时,要用到Directory类中的成员。表8-4列出了完成目录操作的由System.IO.Directory类中常用的成员函数。 9.3文件操作函数 表8-5列出了 Visual Basic .NET 中用于文件和目录操作各种函数的功能: 1.顺序文件的打开 Visual Basic.NET用FileOpen函数打开一个文件。其格式为: FileOpen(文件号,文件名,方式[,访问类型][,共享类型][,记录长度] 格式中各参数的含义如下: ① 文件号:必选 。 ② 文件名:必选 。 ③ 方式:必选。用来指定文件的输入输出方式,其值为枚举类型OpenMode,包括下列成员: OpenMode.Output: 指定顺序输出方式。 OpenMode.Input: 指定顺序输入方式。 OpenMode.Append: 指定顺序输出方式。 ④ 访问类型:可选。用来指定访问文件的类型,其值为枚举类型OpenAccess,包括以下成员: OpenAccess.Default:打开读/写文件 OpenAccess.Read:打开只读文件 OpenAccess.Write:打开只写文件 OpenAccess.ReadWrite:打开读/写文件 ⑤ 共享类型:可选。 包括以下成员: Default :共享, 同Shared。 Shared :任何机器上的任何进程都可以对该文件进行读写操作。 LockRead :不允许其他进程读该文件。只在没有其他Read访问类型的进程访问该文件时,才允许这种共享类型。 LockWrite:不允许其他进程写这个文件。只在没有其他Write访问类型的进程访问该文件时,才能使用这种共享类型。 Lock Read Write:不允许其他进程读写这个文件。 ⑥ 记录长度:可选。记录长度的值不能超过32767B。 示例如下: (1)以Output方式打开文件,并且设置为任何进程都可以对该文件进行读写操作; FileOpen(1,”filetest”,OpenMode.Output,OpenShare.shared) (2)以Input方式打开文件。 FileOpen(1,”filetest”,OpenMode.Input) (3)以Binary方式打开文件 FileOpen(1,”filetest”,OpenMode.Binary,OpenAccess.Read,OpenShare.LockRead) 2、文件的关闭 文件的读写操作结束后,应将文件关闭。这可以通过FileClose函数来实现。其格式为: FileClose([文件号]) 示例如下: FileClose(1) 3.顺序文件的写操作 (1)、Print函数和PrintLine函数 格式:Print(文件号,[[Spc(n)|Tab(n)][表达式表]])) PrintLine(文件号,[[Spc(n)|Tab(n)][表达式表]])) Print函数的功能是:把数据写入文件。“文件号”的含义同前,数据被写入该文件号所代表的文件中。PrintLine函数与Print函数基本相同,唯一的区别是,Print不在行尾包含换行,而PrintLine在行尾包含换行。 例如: FoleOpen(1,”c:\temp\One.txt”,OpenMode.Output) ‘以输出的方式打开文件One.txt Dim x,y As Short Dim S As String =Chr(13)&Chr(10) X=10 Y=20 Print(1,x) ‘把变量x的值入文件号为1的文件中 Print(1,S) ‘写入一个空行 Print(1,y) ‘把变量y的值入文件号为1的文件中 PrintLine(1) ‘用PrintLine函数写入一个空行 Print(1,”Hello EveryOne!”) ‘把字符串Hello EveryOne!写入文件 代码执行后,文件One.txt的内容为: 10 20 Hello EveryOne! (2)Tab函数 格式:Tab(n) Tab函数把光标移到由参数n指定的位置,从这个位置开始输出信息。输出内容放在Tab函数后面,并用逗号隔开。例如: Print(1,Tab(10),”Ok”) 在第10个位置输出字符串ok。 例8-2: 输出以下表格内容。 在窗体上加一个按钮button1,在按钮的click事件中添加以下代码: Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click FileOpen(1, "c:\temp\student.txt", OpenMode.Output) '注意该文件路径必须存在 Dim x, y As Short Print(1, TAB(2), "姓名", TAB(10), "年龄", TAB(16), "专业",TAB(24), "籍贯") PrintLine(1) PrintLine(1, TAB(2), "张三", TAB(10), 20, TAB(16), "计算机", _ TAB(24), “上海”) Print(1, TAB(2), "李四", TAB(10), 18, TAB(16), "艺术", _ TAB(24), “北京“) Print(1, TAB(2), "王五", TAB(10), 16, TAB(16), "数学", _ TAB(24), “天津”) FileClose(1) End Sub 程序运行后,单击按钮,上面的表格内容就会写入文件student.txt中。 (3)Spc函数 格式:Spc(n) 在Print的输出中,用Spc函数可以跳过n个空格。例如: Print(1,”Mike”,SPC(10),”Jack”) 将输出”Mike”然后跳过10个空格在第11个位置输出”Jack”。 (3)Space函数 格式:Space(n) Space函数返回n个空格。 例如: Dim x as String X=”Mike”+Space(10)+”Jack” Print(1,x) 输出结果和上面用Spc函数的结果一样。 (4) Write函数和WriteLine函数 格式:Write(文件号,表达式表) WriteLine(文件号,表达式表) 例8-3:在磁盘上建立一个电话号码文件,存放学生姓名和学生的电话号码。程序如下: Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Name, Tel As String FileOpen(1, "c:\temp\StudentTel.txt", OpenMode.Output) Unit = InputBox("请输入学生姓名:") While UCase(Name) <> "Over" Tel = InputBox("请输入电话号码:") Write(1, Name, Tel) WriteLine(1) Unit = InputBox("请输入学生姓名:") End While FileClose(1) End End Sub 4、顺序文件的读操作 (1)Input函数 格式:Input(文件号,变量) Input函数从一个顺序文件中读出数据项,并把这些数据项赋给程序变量。 例8-4:从键盘上输入3个学生的数据,存放到学生数据文件StudetList.txt中,然后用Input方法将文件中的内容其读到内存,并在输出窗口中显示出来。 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Structure stu Dim stname As String Dim num As Integer Dim age As Integer Dim addr As String End Structure Private Sub Button1_Click(ByVal sender As Object,ByVal e As _ System.EventArgs)Handles Button1.Click Dim CL As String = Chr(13) & Chr(10) Static stud() As stu Dim n, i As Short n = InputBox("请输入学生人数:") FileOpen(1, "d:\temp\student_List.txt", OpenMode.Output) ReDim stud(n) For i = 1 To n stud(i).stname = InputBox("请输入姓名:") stud(i).num = InputBox("请输入学号:") stud(i).age = InputBox("请输入年龄:") stud(i).addr = InputBox("请输入住址:") Write(1, stud(i).stname, stud(i).num, stud(i).age, stud(i).addr) Write(1, CL) '在一行的尾部加上一个回车-换行 Next i FileClose(1) End Sub ‘读取文件StudenList.txt中的内容并输出 Private Sub Button2_Click(ByVal sender As Object,ByVal e As _ System.EventArgs)Handles Button1.Click Dim n, I, j As Short Dim S As String = " " Dim studInfo As String Dim CL As String = Chr(13) & Chr(10) FileOpen(1, "d:\temp\student_List.txt", OpenMode.Input) Debug.WriteLine("") Debug.WriteLine("姓 名" & S & "学号" & S & "年龄" & S & "住址" & CL) Do While Not EOF(1) ‘如果未到记录末尾,就用Input函数读入数据 Input(1, studInfo) If studInfo <> CL Then Debug.Write(studInfo & S) Else Debug.Write(CL) End If Loop Debug.WriteLine(CL) FileClose(1) End Sub (2)LineInput函数 LineInput函数从顺序文件中读取一个完整的行,并把它赋给一个字符串变量。 格式:字符串变量=LineInput(文件号) 例8-5:把一个磁盘文件的内容读到内存并在文本框中显示出来,然后把该文本框中的内容存入另一个磁盘文件。用写字板建立一个名为“libai.txt”的文件,存放在C盘的temp目录下,内容如下: 乌夜啼 黄云城边乌欲栖,归飞哑哑枝上啼。 机中织锦秦川女,碧纱如烟隔窗语。 停梭怅然忆远人,独宿孤房泪如雨。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Aspect, Whole As String Dim CL As String = Chr(13) + Chr(10) FileOpen(1, "c:\temp\libai.txt", OpenMode.Input) Do While Not EOF(1) Aspect = LineInput(1) Whole = Whole & Aspect & CL Loop TextBox1.Text = Whole$ FileClose(1) FileOpen(1, "c:\temp\libai2.txt", OpenMode.Output) Print(1, TextBox1.Text) FileClose(1) End Sub (3)FileCopy函数 FileCopy函数用于复制文件。其格式如下: Public Sub FileCopy( 源文件名, 目标文件名 ) 源文件名:必选项。String 表达式,指定要复制的文件名。包括源文件的目录或文件夹以及驱动器。 目标文件名: 必选项。String 表达式,指定目标文件名。Destination 可能包括目标文件的目录或文件夹以及驱动器。 例8-6:检查文件是否存在,如果存在,则使用 FileCopy 函数将其复制到新文件。 Private Sub CopyFiles()    Dim checkFile As String    checkFile = Dir$("c:\test.txt")    If checkFile = "test.txt"       FileCopy "c:\test.txt", "c:\new.txt"    End If End Sub 5、随机文件的操作 (1)随机文件的打开 FileOpen()函数用于打开随机文件,语法如下: FileOpen(FileNumber ,FileName ,Mode As OpenMode[,Access As OpenAccess[,Share OpenShare [,RecordLength As Integer]]]) 参数: FileNumber: Integer型参数,指有效文件号,1-511之间。 FileName: String参数指任何有效的路径和文件名。 Mode : 文件打开模式,可设为 Input、Output、Append、Random和Binary。 Access: 可选参数,表示文件访问方式可以包含Read、Write和Read Write。 Share: 可选参数,指文件共享方式可以包含Share、LockRead、LockWrite和Lock 。 包括以下成员: Default : 共享, 同Shared。 Shared : 任何机器上的任何进程都可以对该文件进行读写操作。 LockRead : 不允许其他进程读该文件。只在没有其他Read访问类型的进程访问该文件时,才允许这种共享类型。 LockWrite : 不允许其他进程写这个文件。只在没有其他Write访问类型的进程访问该文件时,才能使用这种共享类型。 Lock Read Write :不允许其他进程读写这个文件。 RecordLength:缓冲的字节数。 例如打开一个随机文件,代码如下: FileOpen(1, "myfile", OpenMode.Random) (2)随机文件的关闭 用FileClose()函数关闭随机文件。 语法:FileClose([ParamArray FileNumbers()As integer]) 参数:FileNumbers()表示当前文件号 (3)随机文件的写入 FilePut()函数可以将变量写入文件中。语法如下: FilePut(FileNumber , Value [,RecordNumber As integer]) 参数: FileNumber : Integer型参数,指有效文件号,1-511之间。 Value : 有效变量,将其内容写入文件中。支持的类型有Object、Short、Integer、Single、Double、Byte、Boolean、String、Data和Array。 RecordNumber:可选参数,指定要写的随机文件中的记录数或二进制文件中的字节数。 例如: Dim str As string=”beautiful girl!” FileOpen(1,”C:\girl.txt”,OpenMode.OutPut) FilePut(1,str) FileClose(1) (4)随机文件的读取 FileGet()函数可以从打开的文件中读取信息。语法如下: FileGet(FileNumber , Value [,RecordNumber As integer]) 参数: FileNumber:Integer型参数,指有效文件号,1-511之间。 Value: 有效变量,从文件中读取的内容存入此变量中。支持的类型有Object、ShortInteger、Single、Double、Byte、Boolean、String、Data和Array。 RecordNumber: 可选参数,指定要写的随机文件中的记录数或二进制文件中的字节数。 例如: Dim g As string FileOpen(1,”C:\girl.txt”,OpenMode.InPut) FileGet(1,g) FileClose(1) 6、文件指针 文件指针的定位通过Seek函数来实现。其格式为: Seek(文件号[,位置]) 9.4面向对象的文件操作方法 FSO 对象模型位于 Microsoft 脚本运行时类型库 (Scrrun.dll) 中,支持通过 TextStream 对象创建和操纵文本文件 表8-6列出了 FSO 对象模型的基本组件,这些主题列出了适用于创建和操纵文件、驱动器及目录的属性和方法。 FSO对象常用方法 9.5 心电图数据的简单分析和波形的实现 9.5.1 设计思路和主要步骤 1.建立工程 2.在窗体中添加一个Panel控件,设置其BorderStyle属性的值为Fixed3D,Size属性的值为(512,430)。 3.在Panel控件中添加一个PictureBox控件,name属性设置为pic,Dock属性设置为Fill,Size属性设置为(508,426)。 4.添加两个Button控件。Name属性分别设置为“btstart”、“btend”,Text属性分别设置为“start”、“exit”。 5.新建一个heart.txt文件,在文件中输入一个模拟的心电图数据,注意每行输入一个数字。文件存放在C盘根目录下。数据如下: 0, 0 ,5 ,3 ,-5 , -5 ,110 , -10 ,-5 ,-4 ,-3 , -2 , 0 ,5 , 10 ,12 , 10 , 5 , 0, -3 , -1 , 0 , 0 , 0,5 , 0 ,0 , 5,110 , -10 , -5 ,0 , 0 , 0 , 0 ,5 ,10 , 13 ,5 ,0 习题8 什么是文件、记录、字段? 请说出二进制文件、随机文件、顺序文件的区别。 阅读下面两个函数,说出程序的功能。 Sub WriteData() Dim fs As FileStream fs = New FileStream("c:\data.txt", FileMode.OpenOrCreate) Dim w As BinaryWriter = New BinaryWriter(fs) Dim i As Integer For i = 0 To 11 w.Write(i) Next w.Seek(0, SeekOrigin.Begin) w.Close() fs.Close() End Sub Sub ReadData() Dim fs As FileStream fs = New FileStream("c:\data.txt", FileMode.OpenOrCreate) '创建一个文件流 Dim r As BinaryReader = New BinaryReader(fs) '将数据类型读作二进制类 r.BAseStream.Seek(0, SeekOrigin.Begin) '用基础流查找流的开头 Dim i As Integer For i = 0 To 11 Console.WriteLine(CStr(r.ReadInt32())) '将当前行结束符 Next r.Close() fs.Close() End Sub 创建一个由一些字符构成的顺序文件file1.txt。 File对象中常用的方法有哪些,举例说明。 常用Stream对象中常用的方法有哪些,举例说明。 用递归算法实现一个全盘查找指定文件的例子,查找结果放在列表框中。 用2种编程方法实现文件复制功能。 编写一个程序,实现把文件从原始文件位置移动到新文件位置的操作。 10.面向对象文件的操作方法是什么? VB.net中的文件操作 流 流(stream)是一个抽象的概念。 文件主要用于存放大量的数据,可以保存在各种辅助存储器中,长江的有磁盘,光盘以及U盘。与内存中的数据不同,即使断电,保存在辅助存储器中的文件数据仍可以永久的保存下来。 文件本身是由一个个二进制数0和1组成的,8个二进制位(bit)构成一个字节(byte),字节是文件存储的最小单位。 不管文件中存储的是什么数据,计算机都可以把它看成是一个二进制的字节流。 如下图,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象与文件是一一对应关系。存取文件内容就相当于调用流对象的相关方法。 VB.net中的文件操作 应用程序 流对象 文件 VB.net中的文件操作 使用抽象基类system.io.stream代表刘,它提供read和write两个方法。由于流数据的有序性,因此流对象还有一个读写指针(代表读写的位置)。读和写的内容都是针对读写指针所指向的位置而言,为此,stream类提供一个seek方法用于移动读写指针。 .net与流的操作功能相关的内都放在system.io.stream这个命名空间中,如下图所示,FileStream对象的数据来自于文件,而memoryStream对象的数据来自内存缓冲区,这两个类都继承于Stream类,因此都提供前面提到的read,write,seek等方法 System.io.Stream MemoryStream FileStream VB.net中的文件操作 下面分别介绍memoryStream和FileStream的使用 1.使用MemoryStream MemoryStream的数据来自于内存中的一块连续区域,这块区域称为“缓冲区(buffer)”。可以把缓冲区看成是一个数组,每个数组元素可以存入一个字节的数据。 在创建MemoryStream对象时,可以指定缓冲区的大小,并且可以在需要的时候增大或者减小。 Eg: ‘用于测试内存流的数据 Dim buffer(600) as Byte ‘填充字节数组 Private Sub CreatExampleData() Dim I As Integer For i=0 to 600 ‘Byte类型的数最大不能超过255 ’可以通过对256取模来实现 buffer(i)=CByte(i Mode 256) next End Sub VB.net中的文件操作 以下代码说明内存流的基本使用方法 Private Sub OnTestMemory() ‘创建测试数据 CreatExampleData() ‘创建内存流对象,初始分配50字节的缓冲区 Dim mem as New MemoryStream(50) ‘向内存流中写入字节数组(共601个字节)的所有数据 mem.Write(buffer,0,buffer.GetLength(0)) MsgBox(“写入数据后的内存流长度:”&mem.Length) MsgBox(“分配给内存流的缓冲区大小:”&mem.Capacity) mem.SetLength(550) MsgBox(“调用SetLength方法将长度改为550后: mem.Length=”&mem.Length) mem.Capacity=620 MsgBox(“调用Capacity方法将缓冲区大小改为620后: mem.Capacity=”&mem.Capacity) VB.net中的文件操作 ‘将读写指针移动到距流开头10个字节的位置 mem.Seek(10,SeekOrigin.Begin) ‘读取一个自己并显示,亦可以用read方法读入若干 ‘个字节到数组中 MsgBox(mem.ReadByte()) ‘关闭内存流,释放所占用的缓冲区 mem.Close() End Sub 内存流的Length属性代表了其中所存放的真实数据的长度,而Capacity属性则代表了分配给内存流的内存空间大小。 真实数据 未用空间 Length Capacity VB.net中的文件操作 从上图可以清楚的看到,Capacity一定要大于或等于Length。 还可以使用自己数组来创建一个固定大小的MemoryStream,如下: ‘buffer是一个有601个元素的自己数组 Dim mem As New MemoryStream(buffer) 这是,无法再设置Capacity属性为其他值。 内存流对象的另一个重要特性就是在创建时可以指定它是只读还是只写,以后代码创建一个只读的内存流对象。 ‘基于一个有601个元素的自己数组buffer创建内存流对象,只读 Dim mem As New MemoryStream(buffer,False) 这时,无法向内存流对象写入数据,调用其write方法将引发异常。 VB.net中的文件操作 2.使用FileStream FileStream用于存取文件,一个FileStream对象对应于一个文件。与memoryStream一样, FileStream提供了read,write等系列方法向文件中读取和写入数据。 文件流对象有许多个重载的构造函数,最常用的是通过指定一个文件路径和存取特征来创建一个文件流对象: Dim fs As FileStream fs=New FileStream(“test.data”,FileMode.Create) 第二个参数是枚举类型FileMode的,用于指定操作系统如何管理这文件,下面列举了其可选项: Append 打开现有文件并将读写指针移到文件尾,可 以追加新内容。如果原文件不存在,则创建一个 新文件。 Create 指定操作系统应创建新文件。如果文件已存在, 它将被清空,读写指针位于开头。 VB.net中的文件操作 CreateNew 指定操作系统应创建新文件。要求指定的位置不 存在同名的文件。 Open 指定操作系统应打开现有的文件。 OpenOrCreate 指定操作系统应打开文件(如果文件存在),否 则创建新文件。 Truncate 指定操作系统应代开现有文件,文件一旦打开, 就将被截断为0字节大小。此时不能读(因为文 件内容为空),只能写。 以下sub过程展示了向文件中写入数据的基本方法: Private Sub WriteToFile() Dim fsForWrite As FileStream Try ‘创建一个新文件 fsForWrite=New FileStream(“test.data”,FileMode.Create) VB.net中的文件操作 ‘写入一个字节 fsForWrite.WriteByte(100) ‘填充含有601个元素的字节数组 Me.CreateExampleData() ‘将字节数组写入文件 fsForWrite.Write(buffer,0,buffer.GetLength(0)) Catch ex As Exception MsgBox(ex.Message) Finally ‘关闭文件 fsForWrite.Close() 注:如果一个程序退出了,但它所打开的文件没有被关闭,将导致其他程序无法再修改或删除此文件。 VB.net中的文件操作 以下Sub过程展示了如何从上面代码所创建的文件中读取数据: ’从文件读取 Private Sub ReadFromFile() Dim fsForRead As FileStream Try fsForRead =New FileStream(“..\test.data”,FileMode.Open) ‘读入一个字节 MsgBox(“文件的第一个字节为:”&CStr( fsForRead.ReadByte)) ‘读写指针移到距开头10个字节处 fsForRead.Seek(10,SeekOrigin.Begin) Dim bs(10) As Byte ‘从文件中读取10个字节,存放到数组bs中 fsForRead.Read(bs,0,10) Catch ex As Exception MesBox(ex.Message) Finally fsForRead.Close() End Try End Sub VB.net中的文件操作 操作流对象 不管是MemoryStream还是FileStream,都是以字节为读取与写入数据的基本单位的。而许多应用程序中都是以字符(占用两个字节),数字(比如Integer,占4个字节),String(若干个字符的集合)等来处理数据的,因而在实际使用中直接使用FileStream和MemoryStream就不够方便了,为此,.net提供了另外两组类来解决这个问题。 1.BinaryReader和BinaryWriter 这两个类主要用于向流中读取和写入各种基本数据类型的数据,以Binary类为例,它提供了许多重载的Write方法用于向流中写入各种数据. 以下代码创建一个数据文件test2.data并向其中写入一些数据: ‘写入文件 Private Sub BinaryWriteToFile() ‘创建一个文件流对象 VB.net中的文件操作 Dim fs AS New FileStream(“test2.data”,FileMode.Create) ‘将一个文件流对象作为参数构造一个BinaryWrite对象 Dim bw As New BinaryWrite(fs) ‘写入Integer bw.Write(100) ‘写入字符’A’ bw.Write(“A”c) ‘写入Double类型的数字200.99 Dim d As Double=200.99 bw.Write(d) ‘写入Boolean类型的值true bw.write(True) VB.net中的文件操作 ‘关闭自身(隐含着它所关联的fileStream) bw.Close() End Sub 需要注意的是BinaryWrite对象不能独立存在,它必须依托FileStream或MemoryStream对象来完成向流中写入的工作. 类似于BinaryWrite类和FileStream类这样的合作关系在面向对象的程序中是非常常见的,这种设计方式被称为”组合(Composite)” 一下代码从test2.data 按照原先写入的顺序读取数据: ‘从文件中读 Private Sub BinaryReadFromFile() ‘创建一个文件流对象 Dim fs As New FileStream(“test2.data”,FileMode.Open) ‘将文件流对象作为参数构造一个BinaryReader对象 VB.net中的文件操作 Dim br As New BinaryReader(fs) ‘读入Integer MsgBox(br.ReadInt32) ‘读入字符 MsgBox(br.ReadChar) ‘读入double类型的数字 MsgBox(br.ReadDouble) ‘读入boolean类型的值 MsgBox(br.ReadBoolean) ‘关闭自身 br.Close() End Sub VB.net中的文件操作 2.StreamReader和StreamWriter BinaryWriter只能把字符或者字符数组写入到流中,却没有提供将字符串写入到流中的方法,这个功能由StreamWriter类来完成. StreamReader和StreamWriter类是配对的,一个用于从流中读字符串,另一个则用于向流中写入字符串,其中使用与BinaryReader和BinaryWriter非常类似. 一下代码创建一个文件StringData.txt,并向其中写入两个字符串: ‘将字符串写入文件 Private Sub WriteStringToFile() Dim fs As New FileStream(“StringData.txt”,FileMode.Create) Dim se As New StreamWriter(fs) sw.WritwLine(“something good!”) sw.WritwLine(“something bad!”) sw.Close() VB.net中的文件操作 以下代码从StringData.txt文件分两次读取数据: ‘从文件中读取字符串 Private Sub ReadStringFromFile() Dim fs As New FileStream(“StringData.txt”,FileMode.Open) Dim sr As New StreamReader(fs) MsgBox(sr.ReadLine) MsgBox(sr.ReadLine) sr.Close() End Sub StreamReader对象有一个ReadToEnd方法,可以一次性地从当前读写指针所有的位置开始读到文件结尾,因此,可以使用这个方法一次读取全部的文本文件的内容. VB.net中的文件操作 Xml文件操作 在.net中处理Xml数据 对于xml格式的数据,.net可以用以下来年各种方式来处理: 1.使用DOM处理 DOM(Document Object Model,文档对象模型)是操作Xml国际通用数据模型. 由于Xml格式的数据以元素为基本单位,整个Xml文档只有一个根元素,并且元素之间可以嵌套,所以Xml格式数据非常适用于树的形式来表达.DOM将一个Xml稳定看成一棵树,他定义了一种将Xml文档在内存中的表示形式. 一旦将一个Xml文档转化为内存中的一棵DOM树,就可以通过程序编程来读取,操作和修改Xml文档. VB.net中的文件操作 2.数据流两种方式来处理. XmlTextReader 和 XmlTextWriter类提供了快速和有效地读写XML的方式.这些类用起来很快,但是,追求速度是要付出一定代价的,这将要求连续地前向导航文件中的原始数据.另外,这些类能从一个非高速缓存流中读取XML. 下面我们分别通过一个例子来讲解一下以上所说的两种Xml操作方式 VB.NET 计算机应用教研室 2007.08 VB.NET程序设计实用教程
/
本文档为【VBNET教程-PPT课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索