Download presentation
Presentation is loading. Please wait.
Published by列饮翁 冉 Modified 7年之前
1
第六章 .NET框架 本章学习目标: 认识.NET框架的基本知识,通过.NET框架的System命名空间及其通用语言运行环境获取计算机系统当前基本信息,监视文件系统变化,了解系统注册表操作,编程实现文本文件的读写、复制和删除等基本操作,通过在编程过程中使用哈希表来认识.NET集合,通过编程认识进行XML文档编辑的方法。
2
本章学习要点: 掌握.NET Framework的概念、实现目标和主要组成部分 通过System 命名空间的系统服务类获取系统信息的一般方法
掌握文件类型和文本文件的读写、复制、删除等基本操作 学习通过文件系统监视器控件监视文件系统的变化 学习通过Microsoft.Win32命名空间对操作系统注册表进行操作。 通过哈希表设计具有XML文件支持功能的实用编辑程序
3
6.1 .NET 框架概念 .NET Framework 是支持生成和运行下一代应用程序和XML Web services的内部Windows组件。.NET Framework旨在实现下列目标: (1)一致的面向对象的编程环境。 (2)将软件部署和版本控制冲突最小化的代码执行环境。 (3)可提高代码(包括由未知或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。 (4)可消除脚本环境或解释环境的性能问题的代码执行环境。 (5)使开发人员的经验在面对类型大不相同的应用程序时保持一致。 (6)按照工业标准生成所有通信,以确保基于.NET Framework的代码可与任何其他代码集成。
4
NET Framework两个主要组件:公共语言运行库和. NET Framework类库。公共语言运行库是
.NET Framework两个主要组件:公共语言运行库和.NET Framework类库。公共语言运行库是.NET Framework的基础。可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。
5
公共语言运行库和类库与应用程序之间以及与整个系统之间的关系如下图所示。
图6.1公共语言运行库与其他部分的关系
6
各组成部分之间的关系 图6.2 .NET框架主要组成
7
6.2 公共语言运行库 公共语言运行库(CLR)的功能是通过编译器和工具公开,编写利用此托管执行环境的代码。使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
8
公共语言规范是公共语言运行库(CLR)的一部分。它们之间的关系如下图所示。
图6.3 .NET框架支持多种程序设计语言
9
中间语言代码编译成可以执行的机器代码整个过程如图6.4所示。
图 6.4从源程序转变成可执行代码过程
10
公共语言运行库的一些优点: (1)性能得到了改进。 (2)能够轻松使用其他语言开发的组件。 (3)类库提供的可扩展类型。 (4)新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
11
.NET Framework包括的类执行下列功能:
(1)表示基础数据类型和异常。 (2)封装数据结构。 (3)执行I/O。 (4)访问关于加载类型的信息。 (5)调用.NET框架安全检查。 (6)提供数据访问、多客户端GUI和服务器控制的客户端GUI。
12
6.3 System命名空间 6.3.1命名空间 命名空间是组织类的一种机制。命名空间不仅组织程序,而且组织程序元素,显示给其他程序元素的方式。
13
图6.5都包含ListBox对象的两命名空间层次结构
14
命名空间的使用方法主要有两种: 1)直接使用 在程序中,任何一个命名空间均可以在代码中直接使用。 比如在程序代码中直接使用.NET的命名空间System: System.Console.WriteLine ("北京欢迎你") 表示System命名空间的控制台类Console的WriteLine方法将指定的数据写入标准输出流。
15
2)通过Imports语句引用命名空间 格式:Imports<NameSpace> ,把NameSpace指定的命名空间引入到当前应用程序中。例如:Imports System.Windows.Forms 表示引入名为System.Windows.Forms的命名空间,它是Windows窗体控件所在的命名空间,使我们在程序的后继代码中可以直接写出windows命名空间中的类。
16
(2)创建命名空间 使用VB.NET开发程序时,不仅能使用系统已有的命名空间,还可以通过NameSpace语句创建命名空间,格式如下: Namespace Training Public Class Teacher … End Class Public Class Student End Namespace
17
6.3.2 System命名空间 System命名空间包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。
18
6.3.3运用命名空间创建新控件 在实际编程时,如果想在编写某个程序的时候使用目前没有的功能更强的控件,就需要自己去创建。我们可以仿照例6.1中提供的方法来创建并使用新控件,效果如图6.6至6.8。
19
图6.6 在MDI窗体中创建菜单 图6.7文字的编辑设置 图6.8打印预览
20
6.4用系统服务类获取系统信息 System命名空间包含许多系统服务类,用这些系统服务类可以获得系统信息和管理应用程序运行的环境和状态。
主要利用的类是System.Environment,它提供有关当前环境和平台的信息以及操作它们的方法。
21
Environment 属性 名称 说明 CommandLine 获取该进程的命令行 CurrentDirectory
名称 说明 CommandLine 获取该进程的命令行 CurrentDirectory 获取和设置当前目录的完全限定路径。 (即该进程从中启动的目录) MachineName 获取此本地计算机的 NetBIOS 名称。 NewLine 获取为此环境定义的换行字符串。 OSVersion 获取包含当前平台标识符和版本号的 OperatingSystem 对象。 SystemDirectory 获取系统目录的完全限定路径。
22
Environment 属性 属性 说明 ProcessorCount 获取当前计算机上的处理器数。 TickCount
获取系统启动后经过的毫秒数。 UserDomainName 获取与当前用户关联的网络域名 UserName 获取启动当前线程的人的用户名。 Version 获取一个描述公共语言运行库的主版本、次版本、内部版本和修订号的对象。
23
可以按例6.2方法开发一个显示系统信息的小应用程序,程序能显示一些基本信息。这些信息System命名空间中的类来获取,效果见图6.9 。
图6.9显示系统信息小程序
24
6.5 文件读写操作 传统的VB文件访问模式 传统VB提供了3种文件访问模式: 顺序访问模式 随机访问模式 二进制访问模式。
25
.NET的文件系统操作 在.NET Framework 的System.IO命名空间包含了提供操作文件和目录的基本功能的类。
IO 命名空间包含 File 和 Directory 类,它们提供操作文件和目录的 功能。因为这些对象的方法是静态或共享成员,所以可以直接使用它们,而无需先创建类的实例。 FileInfo 和 DirectoryInfo 类与上面这两个类相关联,并将为 My 功能的用户所熟悉。若要使用这些类,您必须通过在受影响代码的开头处包含 Imports 语句来完全限定其名称或者导入适当的命名空间。
26
System.IO命名空间 System.IO命名空间提供了用于处理文件和流的类与类方法。包括: 类 说明 Directory
公开用于创建、移动和枚举通过目录和子目录的静态方法。 DirectoryInfo 公开用于创建、移动和枚举目录和子目录的实例方法。 File 提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。 FileInfo 提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。
27
System.IO命名空间 类 说明 Path 对包含文件或目录路径信息的 String 实例执行操作。这些操作是以跨平台的方式执行的。
Stream 提供字节序列的一般视图。 IOException 发生 I/O 错误时引发的异常 FileInfo FileSystemInfo为 FileInfo 和 DirectoryInfo 对象提供基类。 FileSystemWatcher 侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。 DriveInfo 提供对有关驱动器的信息的访问。
28
流的基本概念 VB.NET将文件看成是顺序的字节流,每个文件以特定的结束标识符标识结尾。如图所示:
1 n-1 结束标志 N字节文件的VB.NET视图 流是字节序列的抽象概念,文件可以看成是存储在磁盘上的一系列二进制字节信息,VB.NET用流对其进行输入、输出操作, 例如:读取文件信息、向文件写入信息。VB.NET的System.IO命名空间提供相关的类,通过这些类或派生类的方法,可以进行文件的读写操作。
29
VB.NET的流 VB.NET提供Stream 类(System.IO成员),是所有流的基类。这些派生类包括:
⑴文件流FileStream: 用与读写文件能自动缓存(管理内存缓冲区)数据 ⑵缓冲区流BufferedStream:可以面向另一个流进行读取,减少对操作系统的调用次数,提高性能。 ⑶内存流:用于内存的读写访问。
30
应用File类进行文件操作 File类提供各种文件操作,如:创建、删除、移动、复制、打开等静态方法。能够协助创建文件流FileStream对象。 FileStream Stream TextReader StringReader StreamReader File TextWriter StringWriter StreamWriter
31
文件的基本概念 ⑴文件属性: 只读、隐藏、归档 ⑵访问方式: 读、读写、写 ⑶访问权限: 读、写、追加数据等
⑴文件属性: 只读、隐藏、归档 ⑵访问方式: 读、读写、写 ⑶访问权限: 读、写、追加数据等 ⑷共享权限: 文件共享、文件不共享
32
文件常用方法 Copy、Delete、Move、Exists、Open方法 注意:本类不能被实例化(不需创建类的对象)例如:
Dim bFile As Boolean bFile = File.Exists(F:\\Myfile.doc) File.Delete(F:\\Myfile.doc, D:\\Myfile.doc) File.Copy(F:\\Myfile.doc, D:\\Myfile.doc)
33
FileStream 属性 Length 获取用字节表示的流长度。 Position 获取或设置此流的当前位置。 Name
方法 说明 Read 从流中读取字节块并将该数据写入给定缓冲区中。 Length 获取用字节表示的流长度。 Position 获取或设置此流的当前位置。 Name 获取传递给构造函数的 FileStream 的名称。 CanRead 获取一个值,该值指示当前流是否支持读取。 CanWrite 获取一个值,该值指示当前流是否支持写入。
34
FileStream 方法 方法 说明 Read 从流中读取字节块并将该数据写入给定缓冲区中。 Write
使用从缓冲区读取的数据将字节块写入该流。 Close 关闭当前流并释放与之关联的所有资源。 Flush 清除该流的所有缓冲区,使得所有缓冲的数据都被写入到基础设备。 Seek 将该流的当前位置设置为给定值。 ReadByte 从文件中读取一个字节,并将读取位置提升一个字节。
35
StringReader 成员 方法 说明 Read 读取输入字符串中的下一个字符或下一组字符。 ReadLine 从基础字符串中读取一行。
ReadToEnd 将整个流或从流的当前位置到流的结尾作为字符串读取。 Peek 返回下一个可用的字符,但不使用它。 Close 关闭 StringReader。
36
StringWriter 成员 成员 说明 Write方法 写入到 StringWriter 的此实例中。 WriteLine方法
写入重载参数指定的某些数据,后跟行结束符。 Close 方法 关闭当前的 StringWriter 和基础流。 NewLine属性 获取或设置由当前 TextWriter 使用的行结束符字符串。
37
控制台应用程序 创建临时文件并用open方法打开以读取其内容 图6.10 控制台应用程序执行结果
38
Directory类 用于典型操作如移动、创建和删除目录,也可用于获取和设置与目录的创建、访问及写入操作相关的日期时间信息。
由于Directory类的方法是静态的,如果只想执行一个操作,那么使用Directory效率比较高。从另一方面来说,静态会对所用方法都执行安全检查,如果打算多次重用某个对象,可考虑改用DirectoryInfo相应实例方法,因为并不总是需要安全检查,在接受路径作为输入字符串的成员中,路径必须是正确的,否则将引发异常。
39
Directory 类主要的公共方法 名 称 说 明 CreateDirectory 创建指定路径中的所有目录。 Delete
名 称 说 明 CreateDirectory 创建指定路径中的所有目录。 Delete 删除指定的目录。 Exists 确定给定路径是否引用磁盘上的现有目录。 GetCreationTime 获取目录的创建日期和时间。 GetCurrentDirectory 获取应用程序的当前工作目录。 GetDirectories 获取指定目录中子目录的名称。 GetFiles 返回指定目录中的文件的名称。 GetFileSystemEntries 返回指定目录中所有文件和子目录的名称。 GetLogicalDrives 检索计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称。 GetParent 检索指定路径的父目录,包括绝对路径和相对路径。 Move 将文件或目录及其内容移到新位置。 SetCurrentDirectory 将应用程序的当前工作目录设置为指定的目录。
40
应用Directory类进行文件夹操作 Directory类提供各种目录操作 如:读取目录信息、创建、删除、测试等
Dim Filename(), driv() , Ftime As String Filename = Directory.GetFiles("D:\\") 返文件名的数组 driv = Directory.GetLogicalDrives() 返回驱动器的数组 Ftime = File.GetCreationTime(Filename(0))
41
FileSystemInfo类 此类包含文件和目录操作的方法,为 FileInfo 和 DirectoryInfo 对象提供基类。
当分析文件和目录时,一般使用该基类。
42
FileInfo和DirectoryInfo类
FileInfo类提供创建、复制、删除、移动和打开文件的实例方法。许多 FileInfo 方法在您创建或打开文件时返回其他 I/O 类型。可以使用这些其他类型进一步操作文件。有关更多信息,请参见特定的 FileInfo 成员,如Open、OpenRead、OpenText、CreateText 或 Create。如果打算多次重用某个对象,可考虑使用 FileInfo 的实例方法,而不是 File 类的相应静态方法,因为并不总是需要安全检查。在默认情况下,将向所有用户授予对新文件的完全读/写访问权限。 DirectoryInfo 类用于创建、移动和枚举目录和子目录的实例方法。典型操作,如复制、移动、重命名、创建和删除目录。如果打算多次重用某个对象,可考虑使用 DirectoryInfo 的实例方法,而不是 Directory 类的相应静态方法,因为并不总是需要安全检查。
43
file和fileinfo的比较 向文件中追加文本 File.AppendText FileInfo.AppendText 重命名或移动文件
File.Move FileInfo.MoveTo 删除文件。 File.Delete FileInfo.Delete 复制文件。 File.Copy FileInfo.CopyTo 获取文件大小。 FileInfo.Length 获取文件属性。 File.GetAttributes 设置文件属性。 File.SetAttributes 确定文件是否存在。 File.Exists
44
例6.5设计程序进度指示器执行及搜索结果见图6.11和图6.12。
图6.11程序执行进度指示器结果 图6.12搜索结果
45
6.6 监视文件系统的变化 使用.NET 框架提供的FileSystem Watcher ( 文件系统监视器 ) 控件建立的程序可以在有文件创建和删除的时候,把消息列在窗体上。程序提供了类似于Windows提供的在有文件的创建、删除事件发生的时候通知文件系统变化的服务,用法见例6.6,其所用控件及相应程序运行结果如图 6.13 所示。
46
图 6.13文件系统监视器
47
图6.15窗体显示文本文件被删除 图6.14窗体显示新建文本文件
48
6.7访问Windows注册表 系统注册表的每个注册表项之下还可以有注册表项,在注册表项之下还可以有一些值 (Value),记录系统、用户和软件等信息。 .NET框架提供了访问系统注册表的支持,Microsoft.Win32命名空间主要提供了两种服务:一种是用于处理操作系统引发的事件的服务,另一种则是对操作系统的注册表进行操作的服务。添加注册表项及相应数值的注册表编辑程序见例6.7。
49
在例6.7中所设计的窗体见下图。 图6.16添加注册表项及相应数值窗体
50
6.8集合的使用 Visual Basic.NET使用的.NET框架类库包含在现代面向对象程序设计语言中常用的基本数据结构(链表、堆栈、队列、哈希表)的类库,它们位于System.Collections命名空间中, System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。
51
我们将通过哈希表(Hashtable)的用法来学习
我们将通过哈希表(Hashtable)的用法来学习.NET集合类。哈希表有点像数组,但是哈希表可以以任何东西为下标, 哈希表即使包含很多元素时, 查找某一个元素的速度也非常快,查找时间接近于恒定。哈希表用法见例6.8 产品信息编辑程序,其程序运行结果如图6.24所示。
52
图6.24产品信息编辑程序运行结果
53
6.9 接触XML 6.9.1 XML的含义 可扩展标记语言 (XML) 是一种提供数据描述格式的标记语言。XML 是 Visual Studio 和 .NET Framework 的许多功能的核心。该语言使跨越多个平台进行更准确的内容声明和获得更有意义的搜索结果变得更加容易。此外,XML 实现了表示与数据的分离。例如,在 HTML 中,使用标记来告诉浏览器将数据显示为粗体或斜体;而在 XML 中,标记只用于描述数据。在 XML 中,使用样式表(例如,可扩展样式表语言 (XSL) 和层叠样式表 (CSS))在浏览器中显示数据。XML 使数据与表示及处理分离开来,通过应用不同的样式表和应用程序,使您能够根据需要显示和处理数据。 XML 是为在 Web 上传送而进行优化了的 SGML 的子集。它是由万维网联合会 (W3C) 定义的。该标准化确保了结构化数据的统一性和相对于应用或供应商的独立性。
54
下面是一段XML文档: <?xml version="1.0" encoding="utf-8"?> <Products> <Product> <Name>冰箱</Name> <Price>4000</Price> <Maker>新飞</Maker> </Product> <Name>洗衣机</Name> <Price>1500</Price> <Maker>海尔</Maker> <Name>电脑</Name> <Price>5000</Price> <Maker>联想</Maker> </Products>
55
这是一个典型的XML文档,编辑好后可以保存为一个以.xml为后缀的文件Products.xml。
我们可以将此文档分为文档序言 (Prolog) 和文档主体两大部分。可以看到,XML文件是相当简单的。同HTML一样,XML文件也是由一系列的标记组成,不过,XML文件中的标记是自定义的标记,具有明确的含义,我们可以对标记中的内容的含义作出说明。
56
此文件的第一行即是文档序言。该行是一个 XML文档必须要声明的东西,而且也必须位于XML 文档的第一行。在这里它声明了XML文档遵循的版本和使用的编码。在文档序言部分还可以有一些别的声明。
文档的其余部分都属于文档主体,XML文档的内容信息存放在此。可以看到,文档主体是由开始的<Products>和结束的</ Products >控制标记组成,这个称为XML文档的“根元素”。<Product>是作为直属于根元素下的“子元素”,在<product>下又有<Name>、<Price>、 <Maker>这些子元素,而信息就由这些元素组织起来。
57
6.9.2 引用已有代码 为了在新解决方案中引用已有项目代码,可以先建立一个新的空白解决方案,然后把以前创建好的项目加进来即可。
建立新的空白解决方案的方法是先在“文件”菜单中选择“新建”中的“项目”,打开“新建项目”对话框,选择“项目类型”为“其他项目类型”并将其展开,选中“Visual Studio 解决方案” 展开项,在相应的“模板”中已自动选中“空白解决方案”,单击“确定”按钮。
58
然后在“文件”菜单中选择“添加”,再选“现有项目”,在弹出的“添加现有项目”对话框中找到已经创建好的项目所在的文件夹,然后选择相应的项目文件,单击“打开”按钮,已有的项目就被添加到新解决方案中了。然后在“视图”菜单中选择“解决方案资源管理器”,在打开的“解决方案资源管理器”中可以看到已有项目。添加已存在的项目时,项目本身并没有被拷贝到新解决方案所在的文件夹中。具体用法见例6.9 为产品信息编辑程序加上XML支持。
59
按下F5键运行程序,出现的窗体如图6.27所示。 在产品名文本框中输入“影碟机”,在价格文本框中输入“400”,在生产商文本框中输入“先锋”,单击窗体上的“添加”按钮,数据将加到左侧列表框中,如图6.28所示。
60
图6.27程序运行结果 图6.28添加产品数据
Similar presentations