《第10章 文件ppt课件.pptx》由会员分享,可在线阅读,更多相关《第10章 文件ppt课件.pptx(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第10章 文件本章内容u理解理解文件的概念。文件的概念。u掌握传统的文件操作方法。掌握传统的文件操作方法。u掌握文件系统对象模型及其访问文件的方法。掌握文件系统对象模型及其访问文件的方法。u掌握掌握System.IO模型及其访问文件的方法。模型及其访问文件的方法。2第第1010章章 文件文件310.1 10.1 文件文件的概念的概念l文件是存储在某种介质上数据的集合。文件是存储在某种介质上数据的集合。l根据文件存储数据的性质,文件可分为程序文件和数据根据文件存储数据的性质,文件可分为程序文件和数据文件。文件。l根据文件的存取方式和结构,可将文件分为顺序存取文根据文件的存取方式和结构,可将文件分
2、为顺序存取文件、随机存取文件。件、随机存取文件。l根据数据的编码方式,文件可以分为根据数据的编码方式,文件可以分为ASCII文件和二进文件和二进制文件。制文件。410.2 10.2 传统传统方法访问文件方法访问文件通过一些相关的文件通过一些相关的文件I/O函数直接访问操作文件函数直接访问操作文件。5n 顺序文件的操作顺序文件的操作1从文件中读取字符串从文件中读取字符串 从从顺序文件中读取顺序文件中读取字符串字符串的函数的函数:Input、InputString和和LineInput。 (1) Input函数函数Public Sub Input(FileNumber As Integer,ByR
3、ef Value As Object) 其中:其中:FileNumber为有效文件号;为有效文件号;Value为被赋予从文件读取的为被赋予从文件读取的值的值的变量。变量。【例例10-1】 写入和读取文本文件写入和读取文本文件example.txt。FileOpen(1, c:example.txt, OpenMode.Output)Write(1, Hello,)Write(1, World!)FileClose(1)Dim s As StringFileOpen(1, c:example.txt, OpenMode.Input)Do While Not EOF(1) Input(1, s)
4、Console.WriteLine(s)LoopFileClose(1)10.2 10.2 传统传统方法访问文件方法访问文件6(2)InputString函数函数InputString( ByVal FileNumber As Integer, ByVal CharCount As Integer ) As String其中:其中:FileNumber是有效文件号,是有效文件号,CharCount是指定要读取的是指定要读取的字符个数的有效数值表达式。函数字符个数的有效数值表达式。函数返回打开的文件返回打开的文件中的字符。中的字符。【例例10-2】 使用使用InputString函数读取文本文件
5、函数读取文本文件example.txt。Dim s As StringFileOpen(1, c:example.txt, OpenMode.Binary)Do While Not EOF(1) s = InputString(1, 1) Console.WriteLine(s)Loop FileClose(1)10.2 10.2 传统传统方法访问文件方法访问文件7(3)LineInput函数函数 Public Function LineInput (ByVal FileNumber As Integer) As String 其中:其中:FileNumber是有效文件号。函数从打开的顺序文件
6、是有效文件号。函数从打开的顺序文件中读取一行数据并将它赋给中读取一行数据并将它赋给String变量。变量。【例【例10-3】 使用使用LineInput函数读取文本文件函数读取文本文件example.txt。 Dim s As String FileOpen(1, c:example.txt , OpenMode.Binary) Do While Not EOF(1) s = LineInput(1) Console.WriteLine(s) Loop FileClose(1)10.2 10.2 传统传统方法访问文件方法访问文件82把字符串写入文件把字符串写入文件Print/PrintLine
7、函数函数,Write/WriteLine函数函数。要要写文件,应该先将文件写文件,应该先将文件以以Output或或Append方式打开。方式打开。 Public Sub Print(ByVal FileNumber As Integer,ByVal ParamArray Output() As Object)Public Sub PrintLine(ByVal FileNumber As Integer,Val ParamArray Output() As Object)其中其中:FileNumber是有效文件号,是有效文件号,Output是要写入是要写入文件文件的的表达式表达式。 【例例10
8、-4】 使用使用Print/PrintLine函数写入文本文件函数写入文本文件example.txt。FileOpen(1, c:example.txt , OpenMode.Output)PrintLine(1, Hello,)Print(1, World!)FileClose(1)Write/Writeline和和print/printline类似。类似。10.2 10.2 传统传统方法访问文件方法访问文件9n 随机文件的操作随机文件的操作以随机存取方式存取的文件称为随机存取以随机存取方式存取的文件称为随机存取文件。文件。随机随机存取文件由大小相同的记录组成,每条记录又由字段组存取文件由大
9、小相同的记录组成,每条记录又由字段组成成,每,每条记录包含的字段数和数据类型都是相同的。条记录包含的字段数和数据类型都是相同的。每条记录前都有记录号表示此记录开始每条记录前都有记录号表示此记录开始。打开打开一个文件进行随机一个文件进行随机操作访问应该操作访问应该定义一个类型,定义一个类型,该类型对应该文件已包含或未包含的记录该类型对应该文件已包含或未包含的记录。例如例如,用户定义数据类型:,用户定义数据类型:Structure StudentPublic ID As IntegerPublic Name As StringEnd Structure10.2 10.2 传统传统方法访问文件方法访
10、问文件10(1)函数)函数FileOpen打开要进行随机访问的文件的格式:打开要进行随机访问的文件的格式: FileOpen(FileNumber,FileName,OpenMode.Random,RecordLength)FileNumber和和FileName分别指定要打开的文件的编号和文件分别指定要打开的文件的编号和文件名。名。RecordLength以字节为单位指定每条记录的大小以字节为单位指定每条记录的大小。(2)写入随机文件函数:)写入随机文件函数:FilePut(FileNumber As Integer,Value As Object,RecordNumber As Long)
11、参数含义:参数含义:FileNumber(文件号)参数指定文件。(文件号)参数指定文件。RecordNum参数指定要写到文件中的参数指定要写到文件中的位置,位置,如省略该参数,如省略该参数,则在当前位置写入。如果尚未进行过读写操作,则为文件则在当前位置写入。如果尚未进行过读写操作,则为文件头的位置头的位置。Value参数是参数是任意类型的表达式,是要写入文件中任意类型的表达式,是要写入文件中数据。数据。10.2 10.2 传统传统方法访问文件方法访问文件11(3)读出随机文件函数:)读出随机文件函数:FileGet(FileNumber As Integer,Byref Value As Ob
12、ject,RecordNumber As Long)其中:其中:FileNumber(文件号)参数指定文件。(文件号)参数指定文件。RecordNum参数指定要读入的数据在文件中的位置。参数指定要读入的数据在文件中的位置。若省略此参数,则从当前位置开始读。如果尚未进行过若省略此参数,则从当前位置开始读。如果尚未进行过读写操作,则从文件头开始读入。读写操作,则从文件头开始读入。Value参数是从参数是从文件中读出的数据要存入的变量,其数文件中读出的数据要存入的变量,其数据类型决定从文件中读入的字节数。据类型决定从文件中读入的字节数。10.2 10.2 传统传统方法访问文件方法访问文件12【例例1
13、0-5】打开随机访问的文件,写入并读出记录。打开随机访问的文件,写入并读出记录。Dim FileNum As Integer FileNum=FreeFile()获得可用的文件号获得可用的文件号FileOpen(FileNum,” c:raf.txt”,OpenMode.random)打开文件打开文件(1)写入记录:通过)写入记录:通过FilePut函数来替换已经存在的记录或新增记录。函数来替换已经存在的记录或新增记录。Dim FileNum As IntegerDim Myrecord As StudentDim aspect As CharFileNum = FreeFile() 获得可用
14、的文件号获得可用的文件号FileOpen(FileNum, C:raf.txt, OpenMode.Random) 打开随机文件打开随机文件aspect = YDo While UCase(aspect) = Y MyRecord.ID = InputBox(ID) MyRecord.Name = InputBox(姓名姓名) FilePut(FileNum, myrecord) aspect = InputBox(下一个下一个(Y/N)?)LoopFileClose(FileNum)10.2 10.2 传统传统方法访问文件方法访问文件13(2)读出记录)读出记录:把:把记录读入变量中,使用记
15、录读入变量中,使用FileGet函数。函数。 Dim FileNum As IntegerDim Myrecord As StudentFileNumFreeFile()() 获得获得可用的文件号可用的文件号FileOpen(FileNum, c:raf.txt, OpenMode.Random)Do While Not EOF(FileNum)FileGet(FileNum, Myrecord)Console.WriteLine(Myrecord.ID) Console.WriteLine(Myrecord.Name)Loop10.2 10.2 传统传统方法访问文件方法访问文件14n 二进制
16、文件的操作二进制文件的操作二进制二进制文件是文件是字节的集合字节的集合,直接,直接把二进制码存放在文件中把二进制码存放在文件中。二进制。二进制访问模式以字节数来访问模式以字节数来定位定位和和存取数据。存取数据。1打开二进制文件打开二进制文件FileOpen(FileNumber As Integer,FileName As String,Mode As OpenMode,Access As OpenAccess,Share As OpenShare,RecordLength As Integer)其中:其中:Mode参数为参数为Binary。2读写二进制文件读写二进制文件与随机文件相同,使用与
17、随机文件相同,使用FilePut函数写入文件,使用函数写入文件,使用FileGet函数读二函数读二进制文件。进制文件。FileGet(FileNumber As Integer,Byref Value As Object,RecordNumber As Long)FilePut(FileNumber As Integer,Value As Object,RecordNumber As Long)3关闭关闭FileClose(FileNumber)10.2 10.2 传统传统方法访问文件方法访问文件1510.3 10.3 文件系统文件系统对象模型访问文件对象模型访问文件文件系统对象(文件系统对象
18、(FileSystemObject,FSO)提供了一种基于)提供了一种基于对象的工具,用来处理文件和文件夹。对象的工具,用来处理文件和文件夹。文件系统对象包含在文件系统对象包含在Scripting类型库(类型库(Scrrun.Dll)中,使)中,使用之前,需要用之前,需要首先添加引用首先添加引用 “Microsoft Scripting Runtime”。在在Scripting类型库中包含类型库中包含Driver、Folder、File、TextStream和和FileSystemObject对象对象。16n FileSystemObject对象对象1创建创建FileSystemObject对
19、象。对象。可以采用下列两种方法。可以采用下列两种方法。(1)将变量定义为类型)将变量定义为类型FileSystemObject。Dim fso As New FileSystemObject (2)使用)使用CreateObject方法创建方法创建 FileSystemObject 对象。对象。fso = CreateObject(Scripting.FileSystemObject)其中,其中,Scripting 是类型库的名称,是类型库的名称,FileSystemObject 是要创建其实例是要创建其实例的对象的名称。的对象的名称。2FileSystemObject对象的方法。对象的方法。
20、10.3 10.3 文件系统文件系统对象模型访问文件对象模型访问文件17n Drive对象对象用于获取当前系统中各个驱动器的信息。用于获取当前系统中各个驱动器的信息。Drive对象通对象通过过其属性来使用。其属性来使用。Drive对象的属性对象的属性10.3 10.3 文件系统文件系统对象模型访问文件对象模型访问文件18n Folder对象对象Folder对象包含创建、删除和移动文件夹的属性和方法对象包含创建、删除和移动文件夹的属性和方法。Folder对象常用方法对象常用方法10.3 10.3 文件系统文件系统对象模型访问文件对象模型访问文件19n File对象对象使用使用File对象可以创建
21、、删除或移动文件,可以查询对象可以创建、删除或移动文件,可以查询文件的相关信息。文件的相关信息。File对象的属性对象的属性10.3 10.3 文件系统文件系统对象模型访问文件对象模型访问文件20n TextStream对象对象10.3 文件系统文件系统对象模型访问文件对象模型访问文件TextStream对象常用方法对象常用方法TextStream对象用于创建和操作文本文件对象用于创建和操作文本文件21【例例10-6】 使用使用FileSystemObject读写文件读写文件Private Sub Button1_Click(sender As System.Object, e As Syst
22、em.EventArgs) Handles Button1.ClickDim filesystem As New Scripting.FileSystemObject()Dim f1 As Scripting.TextStream f1 = filesystem.OpenTextFile(d:MyFilefile3.txt) Dim contents As String = f1.ReadAll() Console.WriteLine(contents) f1.Close()End Sub10.3 10.3 文件系统文件系统对象模型访问文件对象模型访问文件2210.4 System.IO10.
23、4 System.IO模型访问文件模型访问文件微软用微软用“流流”对象取代了传统的文件对象取代了传统的文件操作操作。Visual Basic .NET将文将文件看成是顺序的字节流,文件流是字节序列的抽象概念。在件看成是顺序的字节流,文件流是字节序列的抽象概念。在System.IO模型下读写文件时模型下读写文件时,通过,通过文件流文件流的方法的方法来实现对文件的读来实现对文件的读写。写。(1)System.IO中的类中的类System.IO中的类名称中的类名称 System.IO模型指定了所有模型指定了所有.NET语言都可用的类的语言都可用的类的集合集合,用来用来对对文件和文件夹进行创建、移动和
24、删除等操作。文件和文件夹进行创建、移动和删除等操作。23(2)System.IO操作的分类操作的分类 Sytem.IO命名空间包含一个用于进行字符、文件和文件夹操作的命名空间包含一个用于进行字符、文件和文件夹操作的类库。类库。操作流的类,包括操作文件流、内存流、读写这些流的相关类。操作流的类,包括操作文件流、内存流、读写这些流的相关类。操作文件的类,包括文件创建、删除、移动和获取文件信息。操作文件的类,包括文件创建、删除、移动和获取文件信息。操作文件夹的类,包括文件夹创建、移动和删除文件夹信息操作文件夹的类,包括文件夹创建、移动和删除文件夹信息。(3)流的种类)流的种类 抽象抽象基类基类Str
25、eam支持读取和写入字节。所有表示流的类都继承自支持读取和写入字节。所有表示流的类都继承自Stream类类。流涉及三种基本操作流涉及三种基本操作:读取:读取、写入写入和和查找。查找。常用的流类常用的流类10.4 System.IO10.4 System.IO模型访问文件模型访问文件24n File类类 File对象提供用于创建、复制、删除、移动和打开单对象提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建一文件的静态方法,并协助创建 FileStream 对象。对象。类中常用的方法类中常用的方法10.4 System.IO10.4 System.IO模型访问文件模型访问文件25
26、【例例10-7】 判断在指定目录是否存在文件判断在指定目录是否存在文件file1.txt,如果存在则将文,如果存在则将文件件file1.txt内容复制到新建文件内容复制到新建文件file2.txt,并删除,并删除file1.txt;若不存在;若不存在file1.txt则创建该文件。则创建该文件。Imports System.IOPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim f1, f2 As String f1 = d:MyFilefile1.txt f2 = d:My
27、Filefile2.txt If (File.Exists(f1) Then File.Copy(f1, f2) File.Delete(f1) Else MsgBox(文件文件file1不存在,创建一个新的文件。不存在,创建一个新的文件。) File.Create(d:MyFilefile1.txt) End If End Sub10.4 System.IO10.4 System.IO模型访问文件模型访问文件26【例例10-8】 读出文件内容。读出文件内容。在例在例10-7的窗体上添加一个的窗体上添加一个Button,名称为,名称为Button2。Private Sub Button2_Cl
28、ick(sender As Object, e As EventArgs) Handles Button2.Click Dim f2 As String f2 = d:MyFilefile2.txt If (File.Exists(f2) Then Dim readText As String = File.ReadAllText(f2) Console.WriteLine(readText) End IfEnd Sub10.4 System.IO10.4 System.IO模型访问文件模型访问文件27n FileStream类类进行本地文件操作的时候,可以采用进行本地文件操作的时候,可以采用
29、FileSteam类,类, 读写读写为字节为字节数组。数组。对于简单数据类型的数据的读写,可以采用对于简单数据类型的数据的读写,可以采用BinaryReader 和和BinaryWriter以及以及StreamReader,StreamWriter类。类。 1创建创建FileStream对象对象 采用采用file对象的对象的create方法或方法或open方法方法,或者采用,或者采用FileStream对象的对象的构造函数。构造函数。(1)使用)使用File对象的对象的Create方法。例如:方法。例如:Dim fs1 As FileStreamfs1=File.Create(d:MyFile
30、ReadMe.txt)(2)使用)使用File对象的对象的Open方法。例如:方法。例如:Dim fs2 As FileStreamfs2=File.Open(d: MyFileReadMe.txt,FileMode.OpenOrCreate,FileAccess.Write)10.4 System.IO10.4 System.IO模型访问文件模型访问文件28例如:例如:Dim fs3 As New FileStream(d: MyFileReadMe.txt,FileMode.Open,FileAccess.Write)(3)使用)使用FileStream对象的构造函数对象的构造函数 Dim
31、 fStream As New FileStream(path, fileMode, fileAccess)其中:其中:Path是要包含文件的路径以及文件名。是要包含文件的路径以及文件名。fileMode、fileAccess是枚举是枚举类型。类型。FileMode、 FileAccess取值取值10.4 System.IO10.4 System.IO模型访问文件模型访问文件292FileStream类的常用方法类的常用方法【例例10-9】 使用使用FileStream打开和关闭文件。打开和关闭文件。Imports System.IOPrivate Sub Button1_Click(send
32、er As Object, e As EventArgs) Handles Button1.Click Dim path As String = d:MyFilefile3.txt Dim fs As FileStream fs = New FileStream(path, FileMode.Create, FileAccess.ReadWrite) fs.Close()End Sub10.4 System.IO10.4 System.IO模型访问文件模型访问文件30n StreamReader类和类和StreamWriter类类1StreamReader类类用来用来读取文件或流中的字符。读取
33、文件或流中的字符。StreamReader类常用方法类常用方法10.4 System.IO10.4 System.IO模型访问文件模型访问文件312StreamWriter类类用来用来将字符写入文件将字符写入文件流流。StreamWriter类常用方法类常用方法10.4 System.IO10.4 System.IO模型访问文件模型访问文件32【例例10-10】 使用使用StreamWriter、StreamReader类,实现文件写入和读出。类,实现文件写入和读出。Imports System.IOPrivate Sub Button1_Click(sender As Object, e A
34、s EventArgs) Handles Button1.ClickDim path As String = d:MyFilefile3.txt Dim fs As FileStream fs = New FileStream(path, FileMode.Create, FileAccess.ReadWrite) Dim sw As New StreamWriter(fs) sw.WriteLine(VB.NET Programming) sw.WriteLine(FileStream、StreamWriter、StreamReader) sw.Flush() Dim sr As New S
35、treamReader(fs) 定义一个定义一个StreamReader Dim s As String sr.BaseStream.Seek(0, SeekOrigin.Begin) 设置当前流的开始位置偏移零位设置当前流的开始位置偏移零位 s = sr.ReadToEnd() 读出数据读出数据 MessageBox.Show(s) fs.Close()End Sub 10.4 System.IO10.4 System.IO模型访问文件模型访问文件33n BinaryReader和和BinaryWriter类类以二进制的方式对文件进行读写以二进制的方式对文件进行读写1BinaryReader
36、类类BinaryReader类常用方法类常用方法10.4 System.IO10.4 System.IO模型访问文件模型访问文件342BinaryWriter类类将数据以二进制的形式写入流或文件。将数据以二进制的形式写入流或文件。BinaryWriter类的常用方法类的常用方法10.4 System.IO10.4 System.IO模型访问文件模型访问文件35【例【例10-11】 创建一个二进制文件保存英文字母创建一个二进制文件保存英文字母“A”“Z”并读取内容在文本框显示。并读取内容在文本框显示。10.4 System.IO10.4 System.IO模型访问文件模型访问文件36Import
37、s System.IOPrivate Sub Button1_Click(sender As System.Object,e As System.EventArgs) Handles Button1.ClickDim fs As New FileStream(d:MyFilefile4.txt, FileMode.Create, FileAccess.ReadWrite)Dim bw As New BinaryWriter(fs)Dim br As New BinaryReader(fs)Dim c As Charbw.BaseStream.Seek(0, SeekOrigin.End)Dim
38、 i As IntegerFor i = 65 To 90 c = CChar(Chr(i) bw.Write(c)Next br.BaseStream.Seek(0, SeekOrigin.Begin) Me.TextBox1.Text = br.ReadChars(26) fs.Close()End Sub10.4 System.IO10.4 System.IO模型访问文件模型访问文件37n Directory类类创建创建、复制、移动、重命名和删除目录等。、复制、移动、重命名和删除目录等。Directory类常用方法类常用方法10.4 System.IO10.4 System.IO模型访问
39、文件模型访问文件38 【例例10-12】 设计如设计如图示图示窗体。使用窗体。使用Directory类获取并类获取并显示计算机驱动器及驱动器内文件夹和文件夹内文件信显示计算机驱动器及驱动器内文件夹和文件夹内文件信息。息。10.4 System.IO10.4 System.IO模型访问文件模型访问文件39代码如下:代码如下:Imports System.IOPrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim gld() As String Dim i As Integer 获取计算机所有
40、驱动器获取计算机所有驱动器 gld = Directory.GetLogicalDrives For i = 0 To gld.Length - 1 Me.ComboBox1.Items.Add(gld(i) Next Me.ComboBox1.SelectedIndex = 0End Sub10.4 System.IO10.4 System.IO模型访问文件模型访问文件40改变选定的驱动器,显示其中的文件夹信息改变选定的驱动器,显示其中的文件夹信息Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventAr
41、gs) Handles ComboBox1.SelectedIndexChanged Dim dr() As String Dim sr1() As String Dim ss As String Dim i As Integer Me.ListBox1.Items.Clear() Me.ListBox2.Items.Clear() ss = CStr(Me.ComboBox1.Items(Me.ComboBox1.SelectedIndex) If System.IO.Directory.Exists(ss) Then dr = System.IO.Directory.GetFiles(ss
42、) sr1 = System.IO.Directory.GetDirectories(ss) For i = 0 To sr1.Length - 1 Me.ListBox1.Items.Add(sr1(i) Next For i = 0 To dr.Length - 1 Me.ListBox2.Items.Add(dr(i) Next Else Me.ListBox1.Items.Clear() Me.ListBox2.Items.Clear() End If End Sub10.4 System.IO10.4 System.IO模型访问文件模型访问文件41改变选定的文件夹,显示其中的文件信息
43、改变选定的文件夹,显示其中的文件信息 Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged Dim fr() As String Dim str As String Dim i As Integer str = CStr(Me.ListBox1.Items(Me.ListBox1.SelectedIndex) If System.IO.Directory.Exists(str) Then Try fr = System.IO.Directory.GetFileSystemEntries(str) Me.ListBox2.Items.Clear() For i = 0 To fr.Length - 1 Me.ListBox2.Items.Add(fr(i) Next Catch exc As Exception MsgBox(文件夹禁止访问!文件夹禁止访问!) End Try Else Me.ListBox1.Items.Clear() Me.ListBox2.Items.Clear() End If End Sub10.4 System.IO10.4 System.IO模型访问文件模型访问文件
限制150内