第五章VisualBasicNET文件.ppt
51页第五章第五章第五章第五章 Visual Basic .NETVisual Basic .NET文件文件文件文件 • •东北大学软件学院东北大学软件学院东北大学软件学院东北大学软件学院主要主要内容内容5.1 Visual .NET文件文件概述概述 5.2 System.IO模型模型5.3 MyComputer.System对象对象5.4 处理文件系统事件处理文件系统事件2 2第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 5.1 Visual .NET文件文件概述概述•文件的结构文件的结构 •文件的类型文件的类型•Visual Basic .NET文件访问方法文件访问方法3 3第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 文件的结构文件的结构•三种常用的文件结构三种常用的文件结构–字节的序列字节的序列–记录的序列记录的序列 –树型结构树型结构 数据只是简单的字节序列,数据只是简单的字节序列,文件系统不负责解释其意义文件系统不负责解释其意义 记录的序列,记录和记录间可记录的序列,记录和记录间可用空格、回车等分隔符分开用空格、回车等分隔符分开 由记录构成的树,记录间由记录构成的树,记录间通过指针相互连接通过指针相互连接 4 4第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 •程序文件和数据文件程序文件和数据文件 –程序文件程序文件:存储计算机程序的源代码或可执行:存储计算机程序的源代码或可执行程序程序, 如如.exe, .vb, .c, .h等。
等–数据文件数据文件:存储普通的用户数据,如实验报告,:存储普通的用户数据,如实验报告,成绩等成绩等•普通文件和设备文件普通文件和设备文件 –普通文件普通文件:代表存储在外存上的有数据集,可:代表存储在外存上的有数据集,可以是数据文件也可以是程序文件以是数据文件也可以是程序文件 –设备文件设备文件:代表的是与主机相联的各种外部设:代表的是与主机相联的各种外部设备,如显示器、打印机、键盘等备,如显示器、打印机、键盘等 文件的结构文件的结构5 5第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 文件的类型文件的类型•文本文件和二进制文件文本文件和二进制文件 –文本文件文本文件:每一个字节存放的是一个:每一个字节存放的是一个ASCII码,码,代表一个字符代表一个字符 –二进制文件二进制文件:内存中的数据原样输出到文件中:内存中的数据原样输出到文件中 •顺序文件和随机文件顺序文件和随机文件 –顺序文件顺序文件:按顺序访问方式建立的文件,记录一:按顺序访问方式建立的文件,记录一般是变长记录般是变长记录 –二进制文件二进制文件:记录是定长的,只要知道记录在文:记录是定长的,只要知道记录在文件中的顺序,就可以知道记录在文件中的位置件中的顺序,就可以知道记录在文件中的位置 6 6第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 Visual Basic .NET文件访问方法文件访问方法 •FileSystem模块模块–提供一些用于直接访问文件语句和方法提供一些用于直接访问文件语句和方法 •System.IO模型模型–提供了一个面向对象的方法访问文件系统提供了一个面向对象的方法访问文件系统 •My.Computer.FileSystem对象对象 –用来取代用来取代FileSystem模块,用于提高应用程模块,用于提高应用程序开发的生产性和程序执行的效率序开发的生产性和程序执行的效率7 7第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 5.2 System.IO模型模型 •System.IO模型的文件读写基于流的概念模型的文件读写基于流的概念–流可以抽象地看作一个字节序列,有起始端和流可以抽象地看作一个字节序列,有起始端和末尾端,并且利用游标指示当前的读写位置末尾端,并且利用游标指示当前的读写位置 8 8第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 •在在VB.NET中,很多数据都可以看作流,这些数中,很多数据都可以看作流,这些数据可以来自内存,来自文件或网络据可以来自内存,来自文件或网络•可以通过可以通过Read,,Write,,Seek等基本操作访问等基本操作访问流所代表的数据流所代表的数据 –Read:从游标所在位置起读取流的数据并存放到指定:从游标所在位置起读取流的数据并存放到指定的数据结构中的数据结构中 –Write:操作将数据从游标所在位置起写入流中:操作将数据从游标所在位置起写入流中–Seek:操作将游标移动到流的指定位置:操作将游标移动到流的指定位置 5.2 System.IO模型模型 9 9第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 Stream类类•MustInherit的抽象类的抽象类•用用Stream类的不同子类代表不同种类流类的不同子类代表不同种类流 流名称流名称对应的的类代表的数据代表的数据文件流文件流FileStream代表文件数据代表文件数据内存内存缓冲流冲流BufferredStream代表来自于另外一个流的数据代表来自于另外一个流的数据内存流内存流MemoryStream代表内存中以无符号字代表内存中以无符号字节形式形式存存储的数据的数据网网络流流NetworkStream代表来自代表来自TCP/IP Socket的数据的数据加密流加密流CryptoStream代表代表对其它流的数据加密后得其它流的数据加密后得到的数据到的数据Imports System.IO1010第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 常用常用类名称名称主要功能主要功能说明明File提供提供Static方法,用于方法,用于创建文件、打开文件、复制文件、建文件、打开文件、复制文件、移移动文件和文件和删除文件,以及除文件,以及创建用于建用于读写文件的写文件的FileSream对象象Directory提供提供Static方法,用于方法,用于创建目建目录、移、移动目目录、遍、遍历子目子目录,,Directory类不能被不能被继承承FileStreamStream类的子的子类,支持同步和异步的文件,支持同步和异步的文件读写操作。
利用写操作利用File Stream可以可以对普通文件普通文件进行操作,也可行操作,也可对设备文件文件进行操作StreamReader按照指定的按照指定的编码方式从一个流中方式从一个流中读取字符数据取字符数据StreamWriter按照指定的按照指定的编码方式将字符数据写入一个流方式将字符数据写入一个流BinaryReader从指定流中从指定流中读取数据,可以按指定取数据,可以按指定编码读取字符数据,也取字符数据,也可以按二可以按二进制形式制形式读取各种基本数据取各种基本数据类型数据或型数据或读取指定取指定长度字度字节BinaryWriter向指定流中写入数据,可以按指定向指定流中写入数据,可以按指定编码写入字符数据,也写入字符数据,也可以按二可以按二进制形式写入各种基本数据制形式写入各种基本数据类型数据或写入指定型数据或写入指定长度的字度的字节 其他常用类其他常用类1111第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 文件的打开与关闭文件的打开与关闭•要打开一个文件,只要根据该文件的路径创建一要打开一个文件,只要根据该文件的路径创建一个个FileStream类的实例对象即可类的实例对象即可 Dim 对象名对象名=New FileStream(文件名,打开模式文件名,打开模式 [,读写权限,读写权限] )可以包括驱动器名可以包括驱动器名和路径的字符串和路径的字符串 用来确定如何打开或创建文件用来确定如何打开或创建文件, 值为值为FileMode枚举类型枚举类型 可以包括驱动器名和路径的字可以包括驱动器名和路径的字符串符串, FileAccess枚举类型枚举类型 Dim File1 New FileStream (“C:\Text.txt”, _ FileMode.OpenOrCreate, FileAccess.ReadWrite )如果不存在,则生成新文件如果不存在,则生成新文件 1212第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 文件的打开与关闭文件的打开与关闭n FileMode枚举类型枚举类型成员名称成员名称功能功能Create创建一个新文件,如果文件已经存在,将创建一个新文件,如果文件已经存在,将被新的文件取代。
可与被新的文件取代可与FileAccess.Write或或FileAccess.ReadWrite同时使用同时使用OpenOrCreate如果指定文件已存在,则打开文件,否则如果指定文件已存在,则打开文件,否则创建新文件创建新文件Open打开已存在的文件,文件不存在时报错打开已存在的文件,文件不存在时报错Append打开已存在文件并将游标移动到文件末尾,打开已存在文件并将游标移动到文件末尾,如果文件不存在,则创建新文件只能与如果文件不存在,则创建新文件只能与FileAccess.Write同时使用,写入的新数同时使用,写入的新数据将追加到原文件的末尾据将追加到原文件的末尾1313第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 成员名称成员名称功能功能Read读文件的访问方式,表示可以从文件读出数据读文件的访问方式,表示可以从文件读出数据可与可与FileAccess.Write组合,表示读写文件的组合,表示读写文件的访问方式访问方式ReadWrite读写文件的访问方式,表示既可以从文件读出读写文件的访问方式,表示既可以从文件读出数据,也可以将数据写入文件。
数据,也可以将数据写入文件Write写文件的访问方式,表示可以将数据写入文件写文件的访问方式,表示可以将数据写入文件可与可与FileAccess.Read组合,表示读写文件的组合,表示读写文件的访问方式访问方式n FileAccess枚枚举类型型文件的打开与关闭文件的打开与关闭1414第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 •可以通过调用可以通过调用FileStream对象的对象的Close方法关闭方法关闭与与FileStream对象对应的文件对象对应的文件 •Seek方法和方法和Positon属性都可用来移动游标位置属性都可用来移动游标位置–Seek–Position File1. CloseDim offset As Integer ‘偏移量偏移量Dim origin As SeekOrigin ‘参照点参照点 Dim returnValue As LongreturnValue=Instance.Seek(origin, offset) value = instance.Position ‘获取游标位置获取游标位置instance.Position = value ‘设置游标位置设置游标位置文件的打开与关闭文件的打开与关闭1515第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 名称名称说明说明Begin流的起始端流的起始端Current游标当前位置游标当前位置End流的末尾端流的末尾端n SeekOrigin枚举类型枚举类型属性名属性名说明说明ASCII按照按照ASCII (7bit )字符集编码字符集编码BigEndianUnicode按照按照UTF-16格式编码,字节排序方式为格式编码,字节排序方式为Big-EndianDefault按照系统当前按照系统当前ANSI代码页编码代码页编码Unicode按照按照UTF-16格式编码,字节排序方式为格式编码,字节排序方式为Little-EndianUTF32按照按照UTF-32格式编码,字节排序方式为格式编码,字节排序方式为Little-EndianUTF7按照按照UTF-7格式编码格式编码UTF8按照按照UTF-8格式编码格式编码n Encoding的的Static属属性性1616第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 文本文件的读写操作文本文件的读写操作 •可以使用可以使用StreamReader和和StreamWriter类读类读写文本文件写文本文件Dim 对象名对象名 As New StreamReader(FileStream对象对象[, 编码方式编码方式] )Dim 对象名对象名 As New StreamWriter(FileStream对象对象[, 编码方式编码方式] )用用Encoding类的类的Static属性给出属性给出可以使用可以使用FileStream对象创建,这样创建的对象创建,这样创建的SreamReader和和StreamWriter对象用于对对象用于对FileStream对象代表的文件作读写文对象代表的文件作读写文本数据的操作本数据的操作 (1) 创建创建StreamReader/StreamWriter对象对象1717第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 Dim 对象名对象名 As New StreamReader (文件名文件名[, 编码方式编码方式] ) Dim 对象名对象名 As New StreamWriter (文件名文件名[, True | False, 编码方式编码方式] )可以直接使用文件名创建,这样创建的可以直接使用文件名创建,这样创建的SreamReader和和StreamWriter对象可以用对象可以用来以文本方式读写与该文件名对应文件来以文本方式读写与该文件名对应文件 Dim File1Reader As New StreamReader ( File1, Encoding.ASCII )Dim File1Writer As New StreamWriter ( File1, Encoding.ASCII )True,写入文件的数据被追加到文本文件的末尾;,写入文件的数据被追加到文本文件的末尾;False,写入文件的据覆盖原来的数据,写入文件的据覆盖原来的数据 缺省值缺省值缺省值缺省值(1) 创建创建StreamReader/StreamWriter对象对象文本文件的读写操作文本文件的读写操作 1818第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 名称名称说明说明Read读入下一个字符读入下一个字符读取指定个数的字符,并存储到指定的存储读取指定个数的字符,并存储到指定的存储空间中,返回实际读取的字符个数空间中,返回实际读取的字符个数ReadLine读入下一行字符串读入下一行字符串ReadToEnd从流的当前位置读到流的末尾从流的当前位置读到流的末尾Peek返回下一个字符,但并不读入该字符返回下一个字符,但并不读入该字符EndOfStream判断当前位置是否为文件末尾判断当前位置是否为文件末尾Close释放释放StreamReader对象,并关闭当前流对象,并关闭当前流Dim returnValue As IntegerreturnValue = instance.ReadDim buffer As Char() ‘存放读取字符串的存储空间存放读取字符串的存储空间Dim index As Integer ‘存储空间中开始存放的位置存储空间中开始存放的位置 Dim count As Integer ‘读取的字符的个数读取的字符的个数Dim returnValue As Integer ‘用于存放返回值用于存放返回值 returnValue = instance.Read(buffer, index, count)Dim returnValue As StringreturnValue = instance.ReadLineDim returnValue As StringreturnValue = instance.ReadToEnd(2) 读取文本文件数据读取文本文件数据 Dim returnValue As IntegerreturnValue = instance.PeekIf Not instance.EndOfStream Then ‘如果不是文件末尾如果不是文件末尾……………………. ‘读数据读数据End If Instance.Close1919第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 ExampleExampleDim onechar As CharIf reader.peek >-1 then onechar = Convert.ToChar(reader.Read) TextBox1.Text += onecharEnd if ü点击按钮点击按钮“Read a Character”, 读取一个字符读取一个字符 ü点击按钮点击按钮“Read a Line”,读取一行字符读取一行字符 Dim linestr As StringIf reader.peek>-1 then linestr = reader.ReadLine TextBox1.Text += linestr & Chr(13) & Chr(10) ‘追加回车符号追加回车符号End ifDim allstr As Stringallstr = reader.ReadToEndTextBox1.Text += allstrü点击按钮点击按钮“Read to End”, 读取从游标当前位置到读取从游标当前位置到文件末尾的所有字符文件末尾的所有字符 2020第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 (3) 向文本文件写入数据向文本文件写入数据名称名称说明说明Write有多种重载的形式,用于将各种不同类型的数据以文本有多种重载的形式,用于将各种不同类型的数据以文本数据的形式写入文件。
包括:基本数据类型(数据的形式写入文件包括:基本数据类型(Char,,boolean, Int32,,Int64, Uint32,,Uint64,,Decimal,, Single,,Double等),字符串,对象等数据等),字符串,对象等数据Flush将缓存内的所有数据写入对应文件流中,并清空缓存将缓存内的所有数据写入对应文件流中,并清空缓存WriteLine有多种重载的形式,用于将不同类型的数据(类似于有多种重载的形式,用于将不同类型的数据(类似于Write)以文本的形式写入文件,并在后面加上行结束符)以文本的形式写入文件,并在后面加上行结束符Close释放释放SreamWriter对象,关闭当前流对象,关闭当前流‘将各种基本数据类型数据以文本形式写入文件将各种基本数据类型数据以文本形式写入文件Dim value As Doubleinstance.Write(value) Dim buffer As Char( ) ‘定义一个字符数组定义一个字符数组Dim index As IntegerDim count As Integer‘将字符数组内的所有字符写入文件将字符数组内的所有字符写入文件instance.Write(buffer) ‘将字符数组中从将字符数组中从index开始的开始的count个字符写入文件个字符写入文件instance.Write(buffer, index, count)Dim value As Stringinstance.Write(value) ‘将字符串写入文将字符串写入文件件instance.Flushinstance.WriteLine ‘向文件写入一个行结束符向文件写入一个行结束符其他重载方法与其他重载方法与Write类似,区别是类似,区别是WriteLine方法多写入一个行结束符方法多写入一个行结束符Dim value As Stringinstance.Write(value) ‘将将String+行结束符写入文件行结束符写入文件instance.Close2121第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 ExampleExampleü点击按钮点击按钮”Open File”, 选择要打开的文件,读取全部内容选择要打开的文件,读取全部内容 OpenFileDialog1.ShowDialog() ‘选择要打开的文件名选择要打开的文件名Try file1 = New FileStream(OpenFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) Catch ex As System.IO.IOException MsgBox("can not open file"+OpenFileDialog1.FileName Exit SubEnd TryDim freader As New StreamReader(file1) ‘创建创建StreamReader对象对象 TextBox1.Text += freader.ReadToEnd ‘读取文件从游标当前位置到末尾的内容读取文件从游标当前位置到末尾的内容2222第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 Dim fwriter As New StreamWriter(file1) ‘创建创建StreamWriter对象对象‘以文本形式写入姓名(字符串),并换行以文本形式写入姓名(字符串),并换行fwriter.WriteLine("Name: " & TextBox2.Text) ‘以文本形式写入年龄(整形),并换行以文本形式写入年龄(整形),并换行fwriter.WriteLine(age)‘以文本形式写入性别(字符串),并换行以文本形式写入性别(字符串),并换行fwriter.WriteLine("Sex: "&ComboBox1.Text) ‘以文本形式写入(字符串)以文本形式写入(字符串)fwriter.Write ("Phone: "&TextBox4.Text) ‘以文本形式写入(字符串)以文本形式写入(字符串)fwriter.WriteLine() ‘换行换行‘以文本形式写入以文本形式写入Email(字符串)(字符串)fwriter.WriteLine("Email: " & TextBox5.Text) fwriter.WriteLine() ‘换行换行fwriter.WriteLine() ‘写入一个空行,作为与一组输入的分隔写入一个空行,作为与一组输入的分隔fwriter.Flush() ‘将缓冲区内的数据全部写入文件将缓冲区内的数据全部写入文件RaiseEvent refre() ‘唤起唤起refre事件事件ü点击按钮点击按钮”Write to File”, 选择要打开的文件,读取全部内容选择要打开的文件,读取全部内容 2323第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 ü发生事件发生事件”refre”时时,从文件中重新读取全部内容,并刷新显从文件中重新读取全部内容,并刷新显示文件内容的文本框示文件内容的文本框file1.Seek(0, SeekOrigin.Begin) ‘将游标移至文件开始端将游标移至文件开始端‘创建创建StreamReader对象对象Dim freader As New StreamReader(file1)TextBox1.Clear()‘读取文件从游标当前位置到末尾的全部内容读取文件从游标当前位置到末尾的全部内容TextBox1.Text += freader.ReadToEnd2424第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 二进制文件的读写操作二进制文件的读写操作•可以使用可以使用BinaryReader和和BinaryWriter类类读写二进制文件读写二进制文件(1) 创建创建BinaryReader/BinaryWriter对象对象Dim 对象名对象名 As New BinaryReader (FileStream对象对象[, 编码方式编码方式]) Dim 对象名对象名 As New BinaryWriter (FileStream对象对象[, 编码方式编码方式])Dim File2 New FileStream (“C:\binary.txt”, _ FileMode.OpenOrCreate, FileAccess.ReadWrite )Dim File2Reader As New BinaryReader ( File2 )Dim File2Writer As New BinaryWriter ( File2 )2525第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 (2) 读取二进制文件数据读取二进制文件数据名称名称说明说明Read有三个重载的方法,分别是:读一个字符,有三个重载的方法,分别是:读一个字符,读指定个数的字符,读指定个数的字节读指定个数的字符,读指定个数的字节ReadBoolean读布尔值数据读布尔值数据ReadByte读一个字节读一个字节ReadChar读一个字符读一个字符ReadDecimal读一个十进制数据读一个十进制数据ReadSigle读一个单精度浮点数据读一个单精度浮点数据ReadDouble读一个双精度浮点数据读一个双精度浮点数据ReadInt16 读读2Byte带符号整型数据带符号整型数据ReadUInt16读读2Byte无符号整型数据无符号整型数据Dim returnValue As IntegerreturnValue = instance.Read ‘读一个字符读一个字符Dim buffer As Byte() ‘字节数组,用于存放读取的数据字节数组,用于存放读取的数据Dim index As Integer ‘开始存放的位置(在字节数组中)开始存放的位置(在字节数组中)Dim count As Integer ‘指定读取的字节数指定读取的字节数Dim returnValue As Integer ‘用于存放实际读取的字节数用于存放实际读取的字节数‘读取读取count个字节,从个字节,从buffer中中index处开始存放处开始存放returnValue = instance.Read(buffer, index, count)Dim buffer As Char() ‘用于存放读取字符的字符数组用于存放读取字符的字符数组Dim index As Integer ‘开始存放的位置(在字符数组中)开始存放的位置(在字符数组中)Dim count As Integer ‘指定读取的字符数指定读取的字符数Dim returnValue As Integer ‘用于存放实际读取的字符数用于存放实际读取的字符数‘读取读取count个字符,从个字符,从buffer中中index处开始存放处开始存放returnValue = instance.Read(buffer, index, count)‘读取各种基本数据类型读取各种基本数据类型Dim bovalue As Booleanbovalue=instance.ReadBooleanDim bvalue As Bytebvalue=instance.ReadByte 2626第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 名称名称说明说明ReadChars读取指定个数的字符读取指定个数的字符ReadBytes 读取指定个数的字节读取指定个数的字节ReadString读取一个字符串读取一个字符串PeekChar返回下一个字符,但并不读入该字符,游标不移动返回下一个字符,但并不读入该字符,游标不移动Close释放释放StreamReader对象,并关闭当前流对象,并关闭当前流(2) 读取二进制文件数据读取二进制文件数据Dim count As IntegerDim returnValue As Char()returnValue=instance.ReadChars(count) ’读读count个字符个字符Dim count As IntegerDim returnValue As Byte()returnValue=instance.ReadBytes(count) ’读读count个字节个字节Dim returnValue As StringreturnValue = instance.ReadString ‘读字符串读字符串Dim returnValue As IntegerreturnValue = instance.PeekCharinstance.Close2727第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 名称名称说明说明Write有多种重载的形式,用于将各种不同类型的数据写入文件。
有多种重载的形式,用于将各种不同类型的数据写入文件包括:基本数据类型(包括:基本数据类型(boolean, Byte, Char,,Int32,,Int64, Uint32,,Uint64,,Decimal,, Single,,Double),字节数),字节数组,字符数组,字符串等数据组,字符数组,字符串等数据Flush将缓存内的所有数据写入对应文件流,清空缓存将缓存内的所有数据写入对应文件流,清空缓存Seek移动与移动与BinaryWriter对应的文件流中游标的位置对应的文件流中游标的位置Close释放释放BianryWriter对象,关闭与其对应的文件流对象,关闭与其对应的文件流(3) 向二进制文件写入数据向二进制文件写入数据‘将各种基本数据类型数据以二进制形式写入文件将各种基本数据类型数据以二进制形式写入文件Dim value As DoubleInstance.Write(value) Dim buffer As Byte( ) ‘定义一个字节数组定义一个字节数组Dim index As IntegerDim count As Integerinstance.Write(buffer) ‘将字节数组内的所有字节写入文件将字节数组内的所有字节写入文件‘将字节数组中从将字节数组中从index开始的开始的count个字节写入文件个字节写入文件Instance.Write(buffer, index, count) Dim value As StringInstance.Write(value) ‘将字符串写入文件将字符串写入文件Instance.FlushDim offset As Integer ‘用于指定偏移量用于指定偏移量Dim origin As SeekOrigin ‘参照点,参照点,SeekOrigin枚举类型枚举类型Dim returnValue As Long ‘接收返回值(游标位置)接收返回值(游标位置)‘将游标移动到距参照点将游标移动到距参照点origin的偏移量为的偏移量为offset的位置的位置returnValue = instance.Seek(offset, origin)Instance.Close2828第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 ExampleExampleü点击按钮点击按钮”Write to File”时时, 以二进制形式将记录写入文件以二进制形式将记录写入文件file1.Seek(0, SeekOrigin.End) ‘将游标移动到文件末尾将游标移动到文件末尾Dim snum(16) As CharDim sname(20) As CharDim sex(10) As Char‘将输入的学将输入的学号、姓名、性别信息复制到对应字符数组号、姓名、性别信息复制到对应字符数组TextBox3.Text.CopyTo(0, snum, 0, TextBox3.Text.Length) TextBox4.Text.CopyTo(0, sname, 0, TextBox4.Text.Length)ComboBox1.Text.CopyTo(0, sex, 0, ComboBox1.Text.Length)2929第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 bwriter.Write(snum, 0, 16) ‘将将16个字符(学号)写入文件个字符(学号)写入文件bwriter.Write(sname, 0, 20) ‘将将20个字符(姓名)写入文件个字符(姓名)写入文件bwriter.Write(Val(TextBox5.Text)) ‘将将Double型数据(年龄)写入文件型数据(年龄)写入文件bwriter.Write(sex, 0, 8) ‘将将8个字符(学号)写入文件个字符(学号)写入文件bwriter.Write(Val(TextBox6.Text)) ‘写入写入Double型数据(成绩)型数据(成绩)bwriter.Flush() ‘将缓存内数据写入文件流,清空缓存将缓存内数据写入文件流,清空缓存RaiseEvent refre() ‘唤起事件唤起事件refreü发生事件发生事件”refre”时时,分别以文本形式和二进制形式读取分别以文本形式和二进制形式读取文件全部内容,并刷新显示文件内容的文本框文件全部内容,并刷新显示文件内容的文本框file1.Seek(0, SeekOrigin.Begin) '将游标移至文件开始端将游标移至文件开始端TextBox1.Clear() ‘清空清空Textbox1'读取文件从游标当前位置到末尾的全部内容读取文件从游标当前位置到末尾的全部内容TextBox1.Text += treader.ReadToEnd file1.Seek(0, SeekOrigin.Begin) '将游标移至文件开始端将游标移至文件开始端3030第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 TextBox2.Clear()‘清空清空Textbox2Do While (file1.Length - file1.Position) >= 60 TextBox2.Text += breader.ReadChars(16) ‘读取读取16个字符(学号)个字符(学号) TextBox2.Text += vbCrLf TextBox2.Text += breader.ReadChars(20) ‘读取读取20个字符(姓名)个字符(姓名) TextBox2.Text += vbCrLf ‘读取读取Double型数值(年龄)型数值(年龄) TextBox2.Text += Str(breader.ReadDouble) TextBox2.Text += vbCrLf ‘读取读取8个字符(性别)个字符(性别) TextBox2.Text += breader.ReadChars(8) TextBox2.Text += vbCrLf ‘读取读取16个字符(学号)个字符(学号) TextBox2.Text += Str(breader.ReadDouble) TextBox2.Text += vbCrLf ‘在在TextBox2中区分相邻记录中区分相邻记录 TextBox2.Text += vbCrLf Loop3131第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 5.3 My.Computer.System对象对象•可以利用可以利用My.Computer.FileSystem对象对象的方法直接访问文件系统的方法直接访问文件系统–可以读写文本文件和二进制文件可以读写文本文件和二进制文件 –还可以做其他一些文件和目录操作,包括创建还可以做其他一些文件和目录操作,包括创建/删除文件或目录,移动文件或目录,复制文件删除文件或目录,移动文件或目录,复制文件或目录,文件或目录的重命名等或目录,文件或目录的重命名等3232第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 My 的顶层对象的顶层对象 3333第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 文件的读写操作文件的读写操作 •文本文件的读取文本文件的读取–用用ReadAllText方法一次将文件全部内容以字方法一次将文件全部内容以字符串形式读出符串形式读出 –读以记录形式组织起来的文本文件读以记录形式组织起来的文本文件–用用OpenTexFileReader方法生成一个方法生成一个StreamReader对象,然后通过对象,然后通过StreamReader对象以文本形式读取文件内容对象以文本形式读取文件内容 3434第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 Dim fileContents As StringfileContents = My.Computer.FileSystem.ReadAllText("C:\text.txt")MsgBox(fileContents)nReadAllText方法方法ReadAllText (FileName[,,Encoding] )用于指定写数据的文本用于指定写数据的文本文件的路径名文件的路径名 指定文本文件指定文本文件的编码方式的编码方式 Dim fileContents As StringfileContents = My.Computer.FileSystem.ReadAllText( _ "C:\text.txt", System.Text.Encoding.UTF32)MsgBox(fileContents))如果读取的文本文件采用了拓展的编如果读取的文本文件采用了拓展的编码方式,在调用码方式,在调用ReadAllTex方法时方法时需要给出文本文件的编码方式需要给出文本文件的编码方式 3535第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 n读以记录形式组织起来的文本文件读以记录形式组织起来的文本文件TextFieldParser对象:用于按一次一记录的方式读取用对象:用于按一次一记录的方式读取用分隔符区分相邻记录的文本文件或定长记录的文本文件分隔符区分相邻记录的文本文件或定长记录的文本文件 (1) 创建一个创建一个TextFieldParser对象对象 Using DRReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C: \test.txt")DRReader.TextFieldType = FileIO.FieldType.DelimitedDRReader.SetDelimiters(",")如果如果“c:\test.txt”文件中文件中的记录是按分隔符的记录是按分隔符“,”区分区分的的DRReader.TextFieldType =_ Microsoft.VisualBasic.FileIO.FieldType.FixedWidthDRReader.SetFieldWidths(5, 10, 11, 6)如果如果“c:\test.txt”文件中的记录是定长的,且每个文件中的记录是定长的,且每个记录包含记录包含4个数据域,长度分别为(个数据域,长度分别为(5,,10,,11,,6)) 3636第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 (2) 按照一次一记录的方式利用循环控制结构读按照一次一记录的方式利用循环控制结构读取文件数据取文件数据 Dim currentRow As String() ‘存放读取的记录存放读取的记录 While Not DRReader.EndOfData Try currentRow = DRReader.ReadFields() //读取一条记录读取一条记录 Dim currentField As String For Each currentField In currentRow //遍历记录的每一个域遍历记录的每一个域 MsgBox(currentField) Next Catch ex As Microsoft.VisualBasic. _ FileIO.MalformedLineException MsgBox("Line " & _ ex.Message & "is not valid and will be skipped.") End Try End While3737第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 文件的读写操作文件的读写操作•写文本文件写文本文件–利用利用WriteAllText方法将字符串数据写入文件方法将字符串数据写入文件 –利用利用OpenTexFileWriter方法生成一个方法生成一个StreamWriter对象,然后通过这个对象,然后通过这个StreamWriter对象向文本文件写入数据对象向文本文件写入数据 3838第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 用于指定要写数据的用于指定要写数据的文本文件的路径名文本文件的路径名 指定写入文件的字符数指定写入文件的字符数据采用何种编码方式据采用何种编码方式 For Each foundFile As String _ In My.Computer.FileSystem.GetFiles("C:\Work") foundFile = foundFile & vbCrLf My.Computer.FileSystem.WriteAllText _ ("C:\Work\FileList.txt", foundFile, True)NextnWriteAllText方法方法要写入文件要写入文件的字符串的字符串WriteAllText ( fileName, string, True | False[, encoding] )True: 将写入的数据追加到文件的末尾将写入的数据追加到文件的末尾;False: 写入数据将覆盖文件中原有的数据写入数据将覆盖文件中原有的数据 3939第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 True: 将写入的数据追加到文件的末尾将写入的数据追加到文件的末尾;False: 写入数据将覆盖文件中原有的数据写入数据将覆盖文件中原有的数据文件的读写操作文件的读写操作•二进制文件的读写操作二进制文件的读写操作–ReadAllBytes 方法用于读取二进制文件的全部方法用于读取二进制文件的全部内容内容 –WriteAllBytes方法用于将字节数组以二进制形方法用于将字节数组以二进制形式写入文件式写入文件 ReadAllBytes( filename ) WriteAllBytes ( fileName, byteArray, True | False) 用于指定读写的二用于指定读写的二进制文件的路径名进制文件的路径名 字节数组字节数组, 是要写入是要写入文件的数据文件的数据 Dim jpgdata( ) As ByteJpgdata = My.Computer.FileSystem.ReadAllBytes("C:\temp\trees.jpg")My.Computer.FileSystem.WriteAllBytes ("C:\temp1\trees.jpg", True)4040第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 •创建目录创建目录•删除目录删除目录其他文件操作其他文件操作My.Computer.FileSystem.CreateDirectory(directory) My.Computer.FileSystem. _ DeleteDirectory(directory,onDirectoryNotEmpty)My.Computer.FileSystem. _ DeleteDirectory(directory ,showUI ,recycle)My.Computer.FileSystem. _ DeleteDirectory(directory ,showUI ,recycle ,onUserCancel) 目录的路径名目录的路径名 指定当要删除的目录中包含指定当要删除的目录中包含其它目录或文件时作何处理其它目录或文件时作何处理 指定是否要用可视的方指定是否要用可视的方法跟踪文件删除过程法跟踪文件删除过程 指定删除的目录是否放指定删除的目录是否放到到Recycle Bin中中 指定当用户在删除过程指定当用户在删除过程中取消操作时作何处理中取消操作时作何处理4141第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 •复制文件复制文件 CopyFile(sourceFileName, destinationFileName)CopyFile(sourceFileName, destinationFileName, overwrite)CopyFile(sourceFileName, destinationFileName, showUI)CopyFile(sourceFileName ,destinationFileName, _ showUI, onUserCancel)要复制的文件的路径名要复制的文件的路径名 复制的目的地复制的目的地 复制时是否覆盖同名文件。
复制时是否覆盖同名文件缺省值为缺省值为FalseFalse 其他文件操作其他文件操作4242第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 •其他操作还包括:其他操作还包括:–复制目录:复制目录:CopyDirectory–获取目录包含的文件或子目录:获取目录包含的文件或子目录:GetFiles –移动文件或目录:移动文件或目录:MoveFile, MoveDirectory –判断文件和目录是否存在:判断文件和目录是否存在:FileExists, DirectoryExists其他文件操作其他文件操作4343第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 5.4 处理文件系统事件处理文件系统事件 •VB.NET提供的提供的FileSystemWatcher组件可以用组件可以用来监视和处理文件系统发生的更新事件来监视和处理文件系统发生的更新事件 •可以指定使用可以指定使用FileSystmWatcher监视的目录和监视的目录和文件的范围,以及更新操作的类型文件的范围,以及更新操作的类型 –生成生成FileStyemWatcher组件的实例组件的实例 –对生成的对生成的FileSytemWatcher实例进行设置,指实例进行设置,指定用于处理文件更新事件的事件处理函数定用于处理文件更新事件的事件处理函数 4444第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 创建创建FileSystemWatcher实例实例•利用工具箱创建利用工具箱创建 –从工具箱的从工具箱的Components选项卡中拖出选项卡中拖出FileSytemWather放到应用程序窗体上放到应用程序窗体上 –直接编写代码创建直接编写代码创建 Dim myWatcher As _ New System.IO.FileSystemWatcher()4545第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 设置设置FileStreamWatcher •设置设置Path属性指定监视的目录属性指定监视的目录 •设置设置Filter属性限定监视的范围属性限定监视的范围 •设置设置NotifyFilter属性指定监视的更新类型属性指定监视的更新类型Dim MyWatcher As New System.IO.FileSystemWatcher()MyWatcher.Path = "C:\"MyWacher.Filter = “*.ppt” MyWatcher.IncludeSubdirectories = FalseMyWatcher.NotifyFilter = System.IO.NotifyFilters.LastAccess _ Or System.IO.NotifyFilters.Size 4646第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 成员名称成员名称说明说明Attributes文件或目录的属性文件或目录的属性CreationTime文件或目录的创建时间文件或目录的创建时间DirectoryName目录的名称目录的名称FileName文件的名称文件的名称LastAccess最后一次访问时间最后一次访问时间LastWrite最后一次写文件或目录的时间最后一次写文件或目录的时间Security文件或目录的安全性设置文件或目录的安全性设置Size文件或目录的大小文件或目录的大小n NotifyFilters枚举类型枚举类型设置设置FileStreamWatcher 4747第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 名称名称说明说明Created在监视范围内有文件或目录被创建时唤起在监视范围内有文件或目录被创建时唤起此事件此事件Deleted在监视范围内有文件或目录被删除时唤起在监视范围内有文件或目录被删除时唤起此事件此事件Renamed在监视范围内有文件或目录被更名是唤起在监视范围内有文件或目录被更名是唤起此事件此事件Changed在监视范围内有文件或目录的大小,系统在监视范围内有文件或目录的大小,系统属性,最后访问时间被更新时唤起此事件属性,最后访问时间被更新时唤起此事件n FileSystemWacher事件类型事件类型 设置设置FileStreamWatcher 4848第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 设置设置FileStreamWatcher•指定事件处理函数指定事件处理函数–创建事件处理函数创建事件处理函数: 通过代码设计器直接编写通过代码设计器直接编写–设置设置EnableRaisingEvents属性属性Private Sub myWatcher_Changed(ByVal sender As _ System.Object, ByVal e As System.IO.FileSystemEventArgs) Dim pathChanged As String pathChanged = e.FullPathEnd SubAddHandler myWatcher.Changed, New System.IO. _ FileSystemEventHandler(AddressOf Me.myWatcher_Changed)MyWatcher.EnableRaisingEvents = True4949第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 ExampleExampleü选择被监视的目录选择被监视的目录FolderBrowserDialog1.ShowDialog()FileSystemWatcher1.Path = _ FolderBrowserDialog1.SelectedPath ‘设置监视的目录设置监视的目录FileSystemWatcher1.EnableRaisingEvents = True ü开始监视开始监视5050第五章第五章第五章第五章 Visual Basic .NET Visual Basic .NET文件文件文件文件 End of ChapterEnd of Chapter。





