第5章 读取和写入文件.

Slides:



Advertisements
Similar presentations
第15章 文件处理技术 变量和数组只能临时存储数据,且数据量很小, 当应用程序终止,数据就会丢失。如果需要将数 据长期存储或者存储大量数据,就需要用到文件。 文件维护的数据通常称为持久数据,存储在计算 机的辅助存储设备中,如磁盘、光盘等。许多程 序都要与外部数据进行交互,如数据库、XML,甚 至文本文件,因此文件操作是软件开发中必不可.
Advertisements

第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
正则表达式一点通:正则中的中文.
Oracle数据库 Oracle 子程序.
第14章 c++中的代码重用.
目标 运用File类进行文件操作 理解流,标准输入/输出流的概念
在PHP和MYSQL中实现完美的中文显示
第九章 字符串.
Hadoop I/O By ShiChaojie.
第十三章 文件和注册表操作.
第六章 目录与文件管理 6.1 目录管理 6.2 文件管理 6.3 文件的读写.
第1章.NET Framework 2.0简介.
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
科研信息管理工具 Endnote X4 王辉.
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
第12章 文件操作 12.1 文件和System.IO模型概述 12.2 System.IO模型 12.3 文件夹和文件操作
第四章 附件 (应用程序软件包).
VSS使用简介 王树升
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 登录UNIX操作系统.
C语言程序设计 主讲教师:陆幼利.
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
$9 泛型基础.
$15 文件操作. $15 文件操作 主要内容 文件系统概述 驱动器、目录和文件 文件流和数据流 自定义IO操作.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
正则表达式 一、基本定义及组成 组成:一个完整的表达式由字符簇,限定符,定位符等组成。
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
第9章 多媒体技术 掌握 Windows 画图工具的基本操作; 掌握 Windows 音频工具进行音频播放;
Python 环境搭建 基于Anaconda和VSCode.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
VB与Access数据库的连接.
数据表示 第 2 讲.
第四章 UNIX文件系统.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
顺序结构程序设计 ——关于“字符串”和数值.
RefWorks使用指南 归档、管理个人参考文献.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第5章 读取和写入文件

.NET Framework 2.0 程序设计 第 1 章: .NET Framework 2.0简介 第 2 章:公共语言运行库和类型 第 3 章:托管代码的编译和执行 第 4 章:委托和事件 第 5 章:读取和写入文件 第 6 章:集合和泛型 第 7 章:数据的序列化 第 8 章:GDI+ 第 9 章:在 .NET Framework 2.0中实现加密 第 10 章: COM 组件与.NET Framework程序集之间的交互操作 第 11 章:使用类型元数据 第 12 章:创建多线程应用程序和应用程序域 第 13 章:代码访问安全性 第 14 章:监视和调试应用程序 第 15 章:使用服务应用程序和电子邮件消息 第 16 章:创建全球化应用程序 第 17 章:配置和安装程序集 2

目标 本章学习目标: 使用 Path、File、FileInfo、Directory、DirectoryInfo、DriveInfo 和 FileSystemWatcher 类管理文件系统 使用 Stream、FileStream、MemoryStream 和 BufferedStream 类使用字节流 使用 DeflateStream、GZipStream、IsolatedStorageFile 和 IsolatedStorageFileStream 类压缩并保护流信息 使用 TextReader、TextWriter、StreamReader、StreamWriter、StringReader、StringWriter、BinaryReader 和 BinaryWriter 类管理应用程序数据 使用 StringBuilder 类来高效地操作字符串 使用正则表达式类来使用正则表达式 3

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题

管理文件系统 一般而言,应用程序都会有保存数据、检索数据的需求 。 使用 Path 类来访问文件路径 5.1 管理文件系统 一般而言,应用程序都会有保存数据、检索数据的需求 。 使用 Path 类来访问文件路径 使用 File 和 FileInfo 类访问文件 (1) File 类 (2) FileInfo 类 使用 Directory 和 DirectoryInfo 类访问目录 (1) Directory 类 (2) DirectoryInfo 类 使用 DriveInfo 类访问驱动器 FileSystemWatcher 类 代码示例C# 代码示例VB 5

使用 Path 类来访问文件路径 Path 类的属性和方法 . 5.1.1 使用 Path 类来访问文件路径 成员 描述 PathSeparator 该属性表示当多个路径字符串连接在一起时,用于分割每个文件或目录路径的字符。通常,当为搜索指定了多个路径时,使用该属性。Windows 使用的默认字符为分号(;)。 InvalidPathChars 该属性表示一个数组,它包含不能用于路径字符串的字符。 DirectorySeparatorChar 该属性表示用于分隔路径字符串的目录段的字符。Windows 使用的默认字符为反斜杠(\)。 VolumeSeparatorChar 该属性表示用于将驱动器盘符与字符串路径的其余部分进行分隔的字符。Windows 使用的默认字符为冒号(:)。 GetDirectoryName 该方法从包括驱动器盘符或文件名的路径中检索目录段。 6

使用 Path 类来访问文件路径(续) 续表: . 5.1.1 使用 Path 类来访问文件路径 GetExtension 该方法用于检索某个指定文件路径中的文件的扩展名。例如,可以使用该方法得到要检索的文件的类型,从而可以使用正确的应用程序将其打开。 GetFileName 该方法用于检索某个指定文件路径中的文件名,包括扩展名。 GetFullPath 该方法用于检索指定文件路径的绝对路径,包括驱动器盘符和目录段。如果仅向 GetFullPath 方法传递文件名,则将在返回的文件名之前加上当前目录的驱动器盘符和目录段。 GetRandomFileName 该方法返回一个强加密的随机名称,可把它用于目录或文件的命名。 GetTempPath 该方法返回本地操作系统用于存储临时文件的目录路径。 7

使用 File 和 FileInfo 类访问文件 . 使用 File 和 FileInfo 类访问文件 5.1.2 使用 File 和 FileInfo 类访问文件 File 类中的可用方法 成员 描述 Create 创建一个文件。 Copy 复制一个文件。 Delete 删除一个文件。 Exists 确定文件是否存在。需要将文件路径传递给该方法,然后它将返回一个 Boolean 值以表明文件是否存在。这是 File 类中最常用的方法,并且通常和 if 语句一起使用。 Move 移动一个文件。 Replace 用另一个文件替换或改写某个文件。 AppendText 创建 StreamWriter 类,将该类配置为在指定的文件中追加文本。 Open 以 FileStream 打开指定的文件,然后,可以使用 FileStream 类的对象将文本写入该文件。 ReadAllText 打开文件,读取文件中的所有文本,将读取的文本存储到字符串变量中,然后关闭该文件。 WriteAllText 创建一个新文件或改写一个现有文件,将字符串变量的内容写入文件,然后关闭该文件。 8

使用 File 和 FileInfo 类访问文件(续) . 使用 File 和 FileInfo 类访问文件(续) 5.1.2 使用 File 和 FileInfo 类访问文件 FileInfo 类的属性和方法 成员 描述 Directory 该属性检索包含文件的目录。 Length 此属性检索文件的大小。 Name 此属性检索文件的名称。 Create 该方法创建一个文件。 AppendText 该方法创建 StreamWriter 类以向文件追加文本。 Open 该方法打开一个文件。 CopyTo 该方法将文件复制到一个新文件并且可以选择改写任何现有文件。 Delete 该方法删除一个文件。 MoveTo 此方法将文件移动到一个新目录。如果新目录中已经存在同名文件,则将抛出一个异常。 Replace 此方法用当前 FileInfo指代的文件内容替换作为参数传入的文件。 9

使用 Directory 和 DirectoryInfo 类访问目录 . 使用 Directory 和 DirectoryInfo 类访问目录 5.1.3 使用 Directory 和DirectoryInfo 类访问目录 Directory 类中的可用方法 方法 描述 CreateDirectory 创建一个新目录。 Delete 删除一个目录。 Exists 确定目录是否存在。如果将目录路径传递给该方法,它会返回一个 Boolean 值以表明目录是否存在。这是 Directory 类中最常用的方法,并且通常和 if 语句配合使用。 GetFiles 检索目录中的文件的列表。 GetDirectories 检索目录中的子目录的列表。 GetLogicalDrives 检索本地计算机上的逻辑驱动器的列表。 GetParent 检索指定目录的父目录。 Move 将目录移动到另一个位置。 10

使用 Directory 和 DirectoryInfo 类访问目录(续) . 使用 Directory 和 DirectoryInfo 类访问目录(续) 5.1.3 使用 Directory 和DirectoryInfo 类访问目录 DirectoryInfo 类的成员 成员 描述 Name 此属性用于获得目录的名称。 FullName 此属性用于获得目录的名称以及完整路径。 Create 该方法创建一个目录。 CreateSubDirectory 该方法为当前目录创建子目录。 GetDirectories 该方法用于获得当前目录中的子目录的列表。 GetFiles 该方法用于获得当前目录中的文件的列表。 MoveTo 该方法用于将目录移动到另一个位置。 Delete 该方法用于删除一个目录。 11

使用 DriveInfo 类访问驱动器 DriveInfo 类的成员 . 5.1.4 使用 DriveInfo 类访问驱动器 成员 描述 AvailableFreeSpace 这是一个只读属性,用于确定驱动器上的可用空间大小。它返回一个考虑了用户的磁盘空间配额的情况下的可用空间大小。 DriveType 用于确定驱动器的类型,例如 CD-ROM 或网络驱动器。该属性为只读,其值为一个 DriveType 枚举的成员。 下表罗列了 DriveType 枚举中所包含的成员。 CDRom:表示 CD-ROM 驱动器。 Fixed:表示一个不可随意移除的固定硬盘。 Network:表示一个网络驱动器。 NoRootDirectory:表示一个没有根目录的驱动器。 Ram:表示一个 RAM 驱动器。RAM 驱动器代表一个已分 配空间的RAM,通常用于提高性能。 Removable:表示一个可移除的驱动器,例如 ZIP 驱动器或外部硬盘。 Unknown:表示一个未知的驱动器类型。 12

使用 DriveInfo 类访问驱动器(续) . 使用 DriveInfo 类访问驱动器(续) 5.1.4 使用 DriveInfo 类访问驱动器 续表: DriveFormat 这是一个只读属性,用于确定驱动器上的文件系统格式类型,例如 NTFS、FAT 和 FAT32。 Name 这是一个只读属性,用于获得驱动器的名称。 TotalFreeSpace 这是一个只读属性,用于确定磁盘上的总可用空间量,它没有考虑用户的空间配额。 TotalSize 该属性用于确定驱动器上的总空间量。 GetDrives 该方法用于获得所有可用驱动器的列表。这是一个静态(共享)方法。 13

FileSystemWatcher 类 FileSystemWatcher 类的委托 代码示例C# 代码示例VB . ErrorEventHandler:System.IO 命名空间中的 ErrorEventHandler 委托,指示在发生错误时将要调用的方法。 RenamedEventHandler:重命名FileSystemWatcher 类的实例所监视的文件或目录时,将调用System.IO 命名空间中的 RenamedEventHandler 委托方法。 代码示例C# 代码示例VB 14

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 15

使用字节流 使用 Stream 类管理字节流 使用 FileStream 类管理文件数据 使用 MemoryStream 类管理内存数据 . 使用字节流 5.2 使用字节流 使用 Stream 类管理字节流 使用 FileStream 类管理文件数据 使用 MemoryStream 类管理内存数据 使用 BufferedStream 类提高流性能 代码示例C# 代码示例VB 16

使用字节流 (续) 5.2 使用字节流 .NET Framework 提供了 Stream 类来管理字节流。Stream 类是一个抽象(MustInherit)类,它提供 .NET Framework 中所有流类的基本功能。 FileStream 类是从 Stream 类继承而来的实体类,它用于将数据以流的形式写入或读出文件。 MemoryStream 类是一个实体类。它从 Stream 类继承而来,用于在内存中写入、读出数据。 BufferedStream 类是从 Stream 类继承而来的实体类,它用于向另一种类型的流提供额外的内存缓冲区。

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 18

压缩和保护流信息 压缩和解压缩 独立存储 使用独立存储类保护流信息 代码示例C# 代码示例VB 5.3 压缩和保护流信息 压缩和解压缩 (1)使用 DeflateStream 类压缩流信息 (2)使用 GZipStream 类压缩流信息 独立存储 使用独立存储类保护流信息 代码示例C# 代码示例VB 19

压缩和保护流信息(续) 压缩是使用较少的位对信息进行编码以减小文件大小的过程。 5.3 压缩和保护流信息 压缩是使用较少的位对信息进行编码以减小文件大小的过程。 解压缩是使用压缩过程中创建的映射将压缩文件恢复成原始状态和大小的过程。

压缩和解压缩 使用 DeflateStream 来压缩流信息 使用 GZipStream类压缩流信息 5.3.1 压缩和解压缩 使用 DeflateStream 来压缩流信息 Deflate Stream 类中提供了使用 Deflate 算法压缩和解压缩流的方法。Deflate 算法是无损文件压缩和解压缩的行业标准算法。无损文件压缩允许从压缩的数据重新构造确切数据。不能使用 DeflateStream 类来压缩大于 4 GB的文件。 使用 GZipStream类压缩流信息 要在压缩过程中检查错误或要与其他操作系统所用程序共享压缩数据,则要使用GZipStream类。GZipStream类包含使用 GZip数据格式进行压缩和解压缩文件的方法。使用GZipStream 格式压缩的文件以 gz扩展名保存。其他操作系统经常使用GZip 格式。该类不能用于解压缩大于4GB 的文件。

独立存储 使用独立存储的优势 5.3.2 独立存储 优点 描述 数据安全 5.3.2 独立存储 使用独立存储的优势 优点 描述 数据安全 使用独立存储使数据更加安全,因为只有具有正确IsolatedStorageFile 权限的应用程序才能创建和访问独立存储文件。从而防止其他的应用程序访问此应用程序中的数据。 稳定性 独立存储通过定义应用程序中的保存数据与代码关联的标准化方法,使应用程序更加稳定。允许管理员使用设计工具操作存储文件以设置安全策略、配置文件存储空间以及删除未用数据。 无需硬编码路径 使用独立存储就无需在应用程序代码中使用硬编码路径。除此之外,你无需了解保存独立存储文件的具体位置。

使用独立存储类保护流信息 IsolatedStorageFileStream类的成员 代码示例C# 5.3.3 使用独立存储类保护流信息 5.3.3 使用独立存储类保护流信息 IsolatedStorageFileStream类的成员 成员 描述 Lock 该方法在允许读取访问的同时,防止其他进程更改FileStream。 Unlock 该方法允许其他进程访问之前被锁定的文件的全部或部分。 Name 该属性获取传递给构造函数的 FileStream的名称。 代码示例C#

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 24

管理应用程序数据 .NET Framework包含了为读/写特定类型的数据而进行优化的类 。 文本、流、字符串和二进制数据 5.4 管理应用程序数据 .NET Framework包含了为读/写特定类型的数据而进行优化的类 。 文本、流、字符串和二进制数据 管理文本数据和字符串 (1)TextReader 类 (2)TextWriter 类 管理字符串 使用BinaryReader 和BinaryWriter管理二进制数据 代码示例C# 25

文本、流、字符串和 二进制数据 文本、流、字符串和二进制数据 5.4.1 文本、流、字符串和二进制数据 数据 描述 Text 5.4.1 文本、流、字符串和二进制数据 文本、流、字符串和二进制数据 数据 描述   Text Text数据类型代表存储在存储后台中的数据,如文本文件或文本列等。使用TextReader类从数据存储后台读取文本,使用 TextWriter 类向数据存储后台写入文本。TextReader 和 TextWriter 类都属于 System.IO 命名空间。 String String 是存储在内存中的字符数组。在.NET Framework中,由System.String类代表字符串。此类可以代表Visual Basic和C#中的字符串。 Binary 二进制文件是以二进制形式编码的文件,数据存储为一串字节。二进制文件可以包含图像、声音、文本或编译代码。BinaryReader 和BinaryWriter 类用作读/写二进制文件。所有这些类都属于System.IO 命名空间。

文本、流、字符串和 二进制数据(续) 续表: 5.4.1 文本、流、字符串和二进制数据 Stream 5.4.1 文本、流、字符串和二进制数据 续表: Stream Stream 是从存储后台读或写字节的管道。.NET Framework 中有几种类与流一起工作。StreamReader 类和 StreamWriter 类用来读取文本或将文本写入文件。所有这些类进行的读/写字符操作基于特定的字符编码配置。除此之外,.NET Framework 还提供三个 Stream 类,即FileStream、MemoryStream 和 BufferedStream,它们用于读/写字节。Stream、StreamReader 和 StreamWriter 类都属于System.IO 命名空间。 FileStream类以流的形式呈现文件。FileStream 读、写、打开、关闭文件系统中的文件。此类还用于操作如管道、标准输入和标准输出等其他与文件相关的操作系统句柄。除此之外,FileStream 类支持同步/异步的读/写操作。 MemoryStream 类创建存储于内存中而不是硬盘中的流。如果需要暂时存储数据,你可以将数据保存到内存流中,从而无需在硬盘上创建临时文件。MemoryStream 类将数据封装为无符号的字节序列,可以直接在存储区中访问这些数据。MemoryStream类帮助你暂时在流中存储数据,无需创建临时文件。 BufferedStream类给另一流上的读/写操作添加一个缓冲区。缓冲区是存储区中用来缓存数据的字节块。使用缓冲区可以减少访问数据时对操作系统的调用次数,并增强系统的读/写功能。可以使用缓冲区进行读/写操作,但是两操作不能同时进行。 使用缓冲区时不一定要使用BufferedStream类。BufferedStream类的缓存逻辑已经被构建到FileStream中。因此,当创建FileStream类的实例时,只需要指定缓冲区大小即可。

管理文本数据和字符串 .NET Framework.支持的字符编码类型: 5.4.2 管理文本数据和字符串 Encoding 类型 描述 5.4.2 管理文本数据和字符串 .NET Framework.支持的字符编码类型: Encoding 类型 描述 ASCIIEncoding 将 Unicode字符编码为单个的7位 ASCII字符。仅支持U+0000 到 U+007F之间的字符值。 UTF7Encoding 使用UTF7编码对Unicode字符进行编码。支持所有Unicode字符值。 UTF8Encoding 使用 UTF8编码对Unicode字符进行编码。支持所有Unicode字符值。 UnicodeEncoding 使用UTF16编码对Unicode字符进行编码。 UTF32Encoding 使用 UTF32编码对Unicode字符进行编码。

管理字符串 使用 StringReader 和 StringWriter 类可以读写字符串中的子字符串。 . 管理字符串 5.4.3 管理字符串 使用 StringReader 和 StringWriter 类可以读写字符串中的子字符串。 StringReader类可以从包含多行的字符串中提取每一行 StringReader 和 StringWriter 类都属于 System.IO 命名空间 StreamReader 和StreamWriter类继承自TextReader 和 TextWriter类 使用StreamReader.ReadToEnd方法可以读取整个流的内容 代码示例VB 29

. 管理二进制数据 5.4.4 使用BinaryReader 和BinaryWriter 类管理二进制数据 使用 BinaryReader 和 BinaryWriter 类可以读/写二进制文件,它们将原始数据类型作为二进制值来读写 。 BinaryReader 和 BinaryWriter类的构造函数需要一个 Stream 类对象参数,以及一个可选的encoding对象参数。 30

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 31

高效操作字符串 字符串处理 使用StringBuilder类高效操作字符串 5.5 高效操作字符串 要学会高效的操作字符串,必须理解.NET Framework中字符串的工作原理。 字符串处理 应用程序可能检索用户名称和口令、创建一个显示消息、从文件中读取字符串或者在将字符串发送到其他进程或组件之前对其进行修改。处理和修改字符串的过程称为字符串处理。 使用StringBuilder类高效操作字符串 .NET Framework 提供的 StringBuilder 类用于更高效地处理字符串,而不是仅简单地进行字符串合并。 代码示例C# 代码示例VB 32

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 33

使用正则表达式 正则表达式是描述或匹配一组字符的字符串。 正则表达式 使用正则表达式类来分析文本模式: (1)RegEx 类 5.6 使用正则表达式 正则表达式是描述或匹配一组字符的字符串。 正则表达式 使用正则表达式类来分析文本模式: (1)RegEx 类 (2)Capture 类 (3)CaptureCollection 类 (4)Group类 (5)GroupCollction类 (6)Match 类 (7)MatchCollection 类 34

正则表达式的概念 正则表达式的各种组成部分: 5.6.1 正则表达式的概念 元素 说明 \ 5.6.1 正则表达式的概念 正则表达式的各种组成部分: 元素 说明 \ 将下一个字符标记为一个特殊字符、一个原义字符、一个 向后引用或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

正则表达式的概念 (续) 续表: 5.6.1 正则表达式的概念 + 5.6.1 正则表达式的概念 续表: + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 {n,m} m 和 n 均为非负整数,其中n ≤m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前3个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

正则表达式的概念 (续) 续表: 5.6.1 正则表达式的概念 ? 5.6.1 正则表达式的概念 续表: ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。 . 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 (pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。 (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分时很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

正则表达式的概念 (续) 续表: 5.6.1 正则表达式的概念 (?=pattern) 5.6.1 正则表达式的概念 续表: (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,‘Windows (?=95|98|NT|2000)’ 能匹配 “Windows 2000” 中的 “Windows” ,但不能匹配 “Windows 3.1” 中的 “Windows”。预查不消耗字符,例如,如果上述表达式匹配到“Windows 98” ,则将从“Windows” 之后而非“98”之后 。 (?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,例如,如果上述表达式匹配到“Windows 98” ,则将从“Windows” 之后而非“98”之后 。 x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 [xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 [^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

正则表达式的概念 (续) 续表: 5.6.1 正则表达式的概念 [a-z] 5.6.1 正则表达式的概念 续表: [a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 \B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 \cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \d 匹配一个数字字符。等价于 [0-9]。

正则表达式的概念 (续) 续表: 5.6.1 正则表达式的概念 \D 匹配一个非数字字符。等价于 [^0-9]。 \f 5.6.1 正则表达式的概念 续表: \D 匹配一个非数字字符。等价于 [^0-9]。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于 \x09 和 \cI。 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

正则表达式的概念 (续) 续表: 5.6.1 正则表达式的概念 \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 5.6.1 正则表达式的概念 续表: \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 \W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。 \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

正则表达式的概念 (续) 续表: 5.6.1 正则表达式的概念 \n 5.6.1 正则表达式的概念 续表: \n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 \nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。 \nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 \un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

分析文本模式 代码示例C# 代码示例VB RegEx 类 该类表示一个包含正则表达式的字符串。 Capture 类 5.6.2 使用正则表达式类来分析文本模式 RegEx 类 该类表示一个包含正则表达式的字符串。 Capture 类 该类是 Match 类和 Group 类的基类。 CaptureCollection 类 该类表示与捕获组匹配的所有捕获。 Group类 该类继承自 Capture 类,且是 Match 类的父类。 GroupCollction类 该类表示 Match 类实例返回的所有组。 Match 类 该类表示 RegEx 类的对象的单个结果。 MatchCollection 类 该类是 Match 类的一个集合。 代码示例C# 代码示例VB 43

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 44

小结 5.7 小结 本章主要介绍了管理文件系统的相关类。.NET Framework 2.0 提供了管理驱动器、目录和文件的类。此外,.NET Framework 还提供了对文件进行读操作和写操作的类,以及对文件进行压缩、解压缩以及按模式搜索的类。本章还介绍了如何高效处理字符串以及如何使用正则表达式。 45

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 46

实验 5.8 实验 参照实验手册,并在教师指导下完成实验报告。 47

第5章 读取和写入文件 管理文件系统 使用字节流 压缩和保护流信息 管理应用程序数据 高效操作字符串 使用正则表达式 小结 实验 习题 48

习题 5.9 习题 1. 要开发一个存储用户文件的应用程序,用于在该路径下保这些文件的应用程序将与 Web 上的其他应用程序共享该路径。有时,必须在 Windows 以外的环境中显示路径,而且,有时还必须修改用于分隔目录段的字符。 应该使用以下哪个属性? 请选择一个最佳答案。 A.InvalidPathChars B.DirectorySeparator C.PathSeparator D.VolumeSeparator 49

习题(续) 5.9 习题 假设你的应用程序必须监视某个文件夹的Word文档的更新。你已经决定使用FileSystemWatcher类,下面哪些选项是需要的? 请选择所有符合条件的答案。 A.将 Filter 属性设置为 Microsoft Word 文档 B.将 Filter 属性设置为 *.doc C.将 NotifyFilter 属性设置为 NotifyFilters.LastWrite D.将 NotifyFilter 属性设置为 NotifyFilters.LastAccess E.为 Changed 事件分配一个事件处理程序 F.为 Renamed 事件分配一个事件处理程序 50

习题(续) 5.9 习题 3. 需要开发个管理病人医疗数据的应用程序。该应用程序需要接受用户输入的病人信息,将其组织成一条基本信息,然后将其存储在应用程序目录的一个子目录下的一个文件中。已经制定了一个文件命名约定,并且现在需要完成代码以将病人的数据写入文件。 应该使用哪个类来将病人的数据写入文件? 请选择一个最佳答案。 A.File B.Stream C.BufferedStream D.FileInfo E.FileStream 51

习题(续) 5.9 习题 4. 要对之前创建的病人医疗数据应用程序进行扩展,以允许用户搜索病人的数据文件。已经确定必须使用 FileStream 来连接到文件进行读数据,但是需要允许用户搜索文件并根据搜索结果从文件返回数据段。 以下哪个方法将帮助你达到这个目的? 请选择一个最佳答案。 A.Write B.Seek C.Flush D.Read 52

习题(续) 5. 你需要压缩应用程序中使用的数据,在压缩过程中,应用程序能够检测错误十分重要。因此,你需要使用某个类来检测错误。 5.9 习题 5. 你需要压缩应用程序中使用的数据,在压缩过程中,应用程序能够检测错误十分重要。因此,你需要使用某个类来检测错误。 你会使用如下哪个类来实现? 请选择一个最佳答案。 A.GZipStream B.DeflateStream C.FileStream D.Stream 53

习题(续) 6. 你决定使用独立存储来保存应用程序所使用的数据。 独立存储具有如下哪些优势? 请选择所有符合条件的答案。 5.9 习题 6. 你决定使用独立存储来保存应用程序所使用的数据。 独立存储具有如下哪些优势? 请选择所有符合条件的答案。 A.应用程序具有稳定和安全的数据存储机制 B.应用程序产生随机的文件名称,从而不产生并发冲突 C.应用程序使用简化的文件系统编码 D.在存储数据之前,应用程序确定应用户数据的正确存储路径 54

习题(续) 7. 应用程序需要将存储数据与用户漫游配置文件相关联,从而无论用户从何处访问应用程序,数据都可用。 5.9 习题 7. 应用程序需要将存储数据与用户漫游配置文件相关联,从而无论用户从何处访问应用程序,数据都可用。 应使用以下哪些类将这些数据写入文件? 请选择所有符合条件的答案。 A.File B.FileStream C.IsolatedStorageFile D.IsolatedStorageFileStream 55

习题(续) 8. 你要开发一个能够读取小文本文件的内容,并向用户显示其数据的应用程序。 以下哪个方法最适合此任务? 请选择一个最佳答案。 5.9 习题 8. 你要开发一个能够读取小文本文件的内容,并向用户显示其数据的应用程序。 以下哪个方法最适合此任务? 请选择一个最佳答案。 A.StreamReader.ReadToEnd B.StreamReader.Read C.FileStream.Read D.FileStream.Flush 56

习题(续) 5.9 习题 9. 你打算使用 .NET Framework 应用程序中的 StreamWriter 将数据写入文本文件;你需要先将当前流中的所有文本写入文本文件。写完文本数据以后,还需要使用 StreamWriter 类向流写入额外数据。 你会使用以下哪个 StreamWriter 类方法? 请选择一个最佳答案。 A.Close B.WriteLine C.Write D.Flush 57

习题(续) 5.9 习题 10. 将下列功能与正确选项匹配。 (1)增强字符串处理性能,从而提高.NET Framework应用程序效率。 5.9 习题 10. 将下列功能与正确选项匹配。 (1)增强字符串处理性能,从而提高.NET Framework应用程序效率。 (2)将字符串值分配给对象之后,不可以更改字符串的值。 (3)帮助你高效处理字符串。 (4)将StringBuilder类中包含的字符串的值转换为string。 在下列选项左边的括号中填入与上述功能相匹 配的序号。 ()StringBuilder 类 ()字符串驻留 ()不可变字符串 ()ToString 方法 58