第六讲 文件管理
- 文件和流
- 公共对话框
l OpenFileDialog
l SaveFileDialog
l PrintDialog
l PrintPreviewDialog
l PageSetupDialog
l FontDialog
l ColorDialog
1. 文件和流
文件分类
l 程序文件和数据文件
l 程序文件是用于存放运行程序的文件;
l 数据文件是用来存储程序文件运行时需要读取或保存的数据的文件。
l 顺序文件和随机文件
根据数据的存储形式,文件可以分为顺序文件和随机文件。
l 顺序文件也就是普通的文本文件,文件里面的数据存取方式为顺序存取,即数据是一个接一个地顺序写入文件中的。读数据时,也是一个接一个地顺序读出文件的。
l 随机文件是一种以记录形式组织数据的文件,它的数据存储方式为随机存储,可以随意读写文件中的记录数据。 但所有记录的长度必须相同。
l 文本文件和二进制文件
根据数据的编码,文件可以分为文本文件和二进制文件。
l 文本文件是以字符方式编码和保存数据的文件; asci Unico
l 二进制文件则是以二进制方式编码和保存数据的文件。
文件访问模式
根据不同类型的文件,访问数据的方式也不相同。 VB.NET 提供了三种:
l 顺序访问模式
l 随机访问模式
l 二进制访问模式
但不论是用哪种模式访问文件,基本操作步骤是相同的,一般都须经过以下三步完成。
l 首先打开文件,如果文件不存在应先创建文件;
l 当文件打开后,就可以对文件进行读或写操作了;
l 当文件操作完毕,应该关闭文件。
流的概念
流 ( Stream )是字节序列的抽象概念,例如文件、输入 / 输出设备、内部进程通信管道或者 TCP/IP 套接字。
流和文件的区别:
文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。对于文件,一般都有相应的目录路径、磁盘存储、文件和目录名等;
流提供从存储设备写入字节和读取字节的方法,存储设备可以是磁盘、网络、内存和磁带等。
一般来说,流要比文件的范围要稍广一些,除文件流之外也存在多种流,如网络流、内存流和缓冲流等。
流的操作一般涉及三个基本方法:
读取流:读取是从流到数据结构(如字节数组)的数据传输。
写入流:写入是从数据结构到流的数据传输。
查找流:查找是对流内的当前位置进行查询和修改 。
其中查找功能取决于流的存储区类型 。例如,网络流没有当前位置的统一概念,因此一般不支持查找。
Stream 类及其类型(流)
Stream 类是一个抽象类 ,不能在程序中创建 Stream 的一个实例。
在 .NET 里面,由 Stream 派生出 5 种具体的流,分别是:
l FileStream 支持对文件的顺序和 随机读写操作 System.IO
l MemoryStream 支持对内存缓冲区的顺 序和随机读写操作 System.IO
l NETworkStream 支持对 Internet 网络资源的顺序和随机读写操作。存在 于 System.Net.Sockets 名称空间。
l CryptoStream 支持数据的编码和解码。存在于 System.Security.Cryptography 名称空间。
l BufferedStream 支持缓冲式的读写对那些本身不支持的对象。
<!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:943806538; mso-list-type:hybrid; mso-list-template-ids:-1899492600 -1840512914 -388233416 1870806592 1880127252 -1304144792 -1253806500 512122610 -257754358 1551116394;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; font-family:Wingdings;} @list l0:level2 {mso-level-start-at:171; mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:72.0pt; mso-level-number-position:left; text-indent:-18.0pt; font-family:Wingdings;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->
System.IO 命名空间
在 VB.NET 中,与 I/O 相关的类都位于命名空间 System.IO 中。使用这些,可以对流或文件进行同步或异步的读写操作。
l System.IO 模型提供了一个基于对象的工具,用于处理文件夹和文件
l System.IO 命名空间包含允许在数据流和文件上进行同步和异步读取及写入 的类型。
l System.IO 命名空间中具体提供了以下功能:
① 创建、删除和操作目录及文件。
② 对目录和文件进行监视。
③ 从流中读写数据或字符。
④ 随机访问文件。
⑤ 使用多种枚举常量设置文件和目录的操作等。
导入 System.IO 命名空间:
Imports System.IO
<!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:新宋体; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@新宋体"; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:479003860; mso-list-type:hybrid; mso-list-template-ids:-408375154 -420162326 -679331892 52831724 325097020 -242470494 -1909430696 -1173713002 35943036 2124976812;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; font-family:Wingdings;} @list l0:level2 {mso-level-start-at:171; mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:72.0pt; mso-level-number-position:left; text-indent:-18.0pt; font-family:Wingdings;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->
FileStream 类
System.IO 命名空间下除了 File 类、 Stream 类和 FileStream 类外还提供一个 BinaryReader 类,它用于从流中读取字符串或基本的数据类型。它所对应的是 BinaryWriter 类。 BinaryWriter 类用于向流中写数据。
进行本地文件操作的时候 ,我们可以采用 FileSteam 类, 可以很简单的读写为字节数组 。
对于简单数据类型的数据的读写 ,可以采用 BinaryReader 和 BinaryWriter 以及 StreamReader , StreamWriter 类 。
l BinaryReader ,用特定的编码将基元数据类型读作二进制值。
l BinaryWriter 以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。
l StreamReader/Writer 则是把数据存储为 XML 格式。
File 类的常用的方法
1. 创建文件 的方法 Create
其一般格式为:
File.Create(ByVal path As String)
2. 打开文件 的方法 Open
其一般格式为:
File.Open(ByVal path As String, ByVal mode As FileMode ) As FileStream
3. 检查在指定的目录中是否存在某文件的方法 Exists
其一般格式为:
File.Exists(ByVal path As String) As Boolean
4. 复制文件的方法 Copy
其一般格式为:
File.Copy(ByVal sourceFileName As String,ByVal destFileName As String)
5. 删除指定文件的方法 Delete
其一般格式为:
File.Delete( ByVal path As String)
6. 移动文件的方法 Move
File.Move( ByVal sourceFileName As String, ByVal destFileName As String)
Public Shared Sub Main()
Dim SourceFileName As String = "d:/file.txt"
Try
Dim DestFileName1 As String = "d:/TEMP/FileCopy.BAK"
Dim DestFileName2 As String = "d:/TEMP/File.txt"
If File.Exists(DestFileName1) Then
File.Delete(DestFileName1)
End If
If File.Exists(DestFileName2) Then
File.Delete(DestFileName2)
End If
File.Copy(SourceFileName, DestFileName1)
File.Move(SourceFileName, DestFileName2)
Catch Error_Info As Exception
Console.WriteLine(" 文件操作错误!" & Error_Info.ToString())
End Try
End Sub
<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->
2. 公共对话框
使用 InputBox 和 MsgBox 函数可以建立简单的对话框,但同时 Visual Basic.NET 也提供了 7 个常用对话框的控件: OpenFileDialog,SaveFileDialog,FontDialog,ColorDialog,PrintDialog,PrintPreviewDialog,PageSetupDialog.
这些控件都是从 CommonDialog 类继承,下面给出 CommonDialog 类的层次结构:
<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:新宋体; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@新宋体"; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->
打开对话框控件( OpenFileDialog )
FileDialog 类的属性方法等
OpenFileDialog1.InitialDirectory = "d:/" | 设置默认打开路径 |
OpenFileDialog1.DefaultExt = "txt" | 设置默认文件类型 |
OpenFileDialog1.Filter = " 文本文件(*.txt)|*.txt" | 文件过滤 |
DefaultExt | 为一个字符串,用于获取或设置 默认文件扩展名。 |
FileName | 用于获取或设置一个包含在文件对话框中选定的文件名的字符串。 |
FileNames | 用于获取对话框中所有选定文件的文件名。 |
Multiselect | 用于获取或设置一个值,该值指示对话框是否允许选择多个文件,如果对话框允许同时选定多个文件,则为 true ;反之,则为 false 。 |
RestoreDirectory | 用于获取或设置一个值,该值指示对话框在关闭前是否还原当前目录 |
Filter | 用于获取或设置当前文件名筛 选器字符串,该字符串决定对话框的 “ 另存为文件类型 ” 或 “ 文件类型 ” 框中出现的选择内容。 其一般格式为: " 文件类型名称 1| 文件扩展名 1| 文件类型名称 2| 文件扩展名 2|… …| 全部文件 (*.*)|*.*" |
OpenFileDialog 的基本方法
有 OpenFile 和 ShowDialog 方法。
openFile 独有的一些方法和属性,主要是 OpenFile() 方法,返回 Stream 类型
OpenFile 方法:打开用户选定的具有只读权限的文件,该文件由 FileName 属性指定,其一般格式为:
OpenFileDialog.OpenFile()
如果运行 OpenFileDialog 对话框 ,只要使用其基本方法 ShowDialog 即可,其一般格式为:
OpenFileDialog.ShowDialog()
如果用户在对话框中单击 “ 确定 ” ,则为本方法返回 DialogResult.OK ;否则为 DialogResult.Cancel 。
<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->
保存对话框控件( SaveFileDialog )
SaveFileDialog 控件与 Windows 使用的 “ 保存文件 ” 对话框相同。在 Windows 应用程序中可将该组件用作简单的文件保存。
与 OpenFileDialog 类似, SaveFileDialog 的基本属性也有 DefaultExt 、 FileName 、 Filter 、 FilterIndex 、 RestoreDirectory 等,这些属性基本性质的与 OpenFileDialog 雷同。
SaveFileDialog 的基本方法
SaveFileDialog 的基本方法是 OpenFile 和 ShowDialog 方法。其中 OpenFile 方法打开用户选定的具有读 / 写权限的文件。其一般格式为:
SaveFileDialog.OpenFile()
该方法返回用户选定的读 / 写文件。如果使用 ShowDialog 方法将调用对话框,打开选定的文件,其一般格式为:
SaveFileDialog.ShowDialog()
如果用户在对话框中单击 “ 确定 ” ,则为本方法返回 DialogResult.OK ;否则为 DialogResult.Cancel 。
<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:新宋体; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@新宋体"; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:841.9pt 595.3pt; mso-page-orientation:landscape; margin:2.85pt 2.85pt 2.85pt 2.85pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
Dim newForm As New Form2
'newForm.MdiParent = Me
newForm.Show()
StatusBar1.Panels(1).Text = "NEW"
End Sub
Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click
'1 、导入相应的命名空间
'2 、对文件和流进行操作,设置变量、
'3 、设置如何使用OpenFileDialog
Try
OpenFileDialog1.InitialDirectory = "d:/"
OpenFileDialog1.DefaultExt = "txt"
OpenFileDialog1.Filter = " 文本文件(*.txt)|*.txt"
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
myFileStream = OpenFileDialog1.OpenFile
If Not (myFileStream Is Nothing ) Then
Dim buffer(myFileStream.Length()) As Byte
Dim myStreamReader As New StreamReader(myFileStream)
myStreamReader.BaseStream.Seek(0, SeekOrigin.Begin)
Dim strTemp As String
While myStreamReader.Peek() > -1
strTemp = strTemp & myStreamReader.ReadLine() & vbCrLf
End While
TextBox1.Text = strTemp
myFileStream.Close()
End If
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
StatusBar1.Panels(1).Text = "OPEN"
End Sub
Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
Try
Dim mySaveFileDialog As New SaveFileDialog
mySaveFileDialog.InitialDirectory = "d:/"
mySaveFileDialog.DefaultExt = "txt"
mySaveFileDialog.Filter = " 文本文件(*.txt)|*.txt| 所有文件(*.*)|*.*"
mySaveFileDialog.FilterIndex = 1
mySaveFileDialog.RestoreDirectory = True
If mySaveFileDialog.ShowDialog() = DialogResult.OK Then
Dim fileName As String
fileName = mySaveFileDialog.FileName
myFileStream = New FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)
Dim myStreamWriter As New StreamWriter(myFileStream)
myStreamWriter.WriteLine(TextBox1.Text)
myStreamWriter.Flush()
myStreamWriter.Close()
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub