1、第7章 目录与文件管理,7.1 系统环境相关类 7.2 目录管理 7.3 文件管理 7.4 文件的读写 7.5 FileSystemWatcher组件,7.1 系统环境相关类,.NET框架下,有与系统环境相关类。 1. Environment类该类除了提供当前环境和操作系统平台相关的信息外,还提供了获取本地逻辑驱动器和特殊文件夹的方法。 2. DriveInfo类提供了本地驱动器相关的详细信息。,7.1.1 Environment类,1.常用的属性和方法CurrentDirectory属性 OSVersion属性NewLine属性Version属性 GetLogicalDrives方法 Get
2、FolderPath方法,7.1.2 DriveInfo类,使用DriveInfo可以确定当前可用的驱动器以及这些驱动器的类型,还可以通过查询来确定驱动器的容量和剩余空间。 DriveInfo allDrives = DriveInfo.GetDrives( ); foreach (DriveInfo d in allDrives) Console.WriteLine(“Drive 0“, d.Name);Console.WriteLine(“文件类型: 0“, d.DriveType);if (d.IsReady = true)Console.WriteLine(“卷标: 0“, d.Vol
3、umeLabel);Console.WriteLine(“文件系统: 0“, d.DriveFormat);Console.WriteLine(“当前用户可用空间:0 bytes“, d.AvailableFreeSpace);Console.WriteLine(“总可用空间:0 bytes“, d.TotalFreeSpace);Console.WriteLine(“驱动器总容量:0 bytes “, d.TotalSize); ,7.2 目录管理,在System.IO命名空间中,.NET框架提供了3种对目录进行管理的类,分别是Directory类、DirectoryInfo类和Path类。
4、 1.Directory类和DirectoryInfo类 区别:Directory类(只提供静态方法)DirectoryInfo类(需要实例化才能使用) DirectoryInfo类的构造函数形式如下:public DirectoryInfo( string path);参数path表示目录所在的路径。例如:DirectoryInfo dirInfo = new DirectoryInfo(“e:temp“); 注意:(1)path是合法的路径。(2)用System.Environment.SpecialFolder下的枚举可以获取特殊文件夹路径。,7.2 目录管理,2.DirectoryIn
5、fo类的主要属性 Exists FullName Parent CreationTime 3.Directory类提供的静态方法 CreateDirectory Delete Move Exists GetCurrentDirectory,7.2.2 Path类,1. Path类用于对包含文件或目录路径信息的String实例执行操作。 2. 常用方法:GetDirectoryName方法 GetExtension方法 GetFileName方法 GetFileNameWithoutExtension方法 GetFullPath方法,7.2.3 目录的创建、删除和移动,1.创建目录 Direct
6、ory类的CreateDirectory方法用于创建指定路径中的所有目录。 public static DirectoryInfo CreateDirectory (string path)其中参数path为要创建的目录路径。 举例: Directory.CreateDirectory(“c:test“); Directory.CreateDirectory(“c:testt1t2“);,7.2.3 目录的创建、删除和移动,2.删除目录 Directory类的Delete方法用于删除指定的目录,常用的方法原型为 public static void Delete(string path, bo
7、ol recursive) 其中:path参数不区分大小写,可以是相对于当前工作目录的相对路径,也可以是绝对路径。recursive是一个布尔值,如果要移除path中的目录(包括所有子目录和文件),则为true;否则为false。,7.2.3 目录的创建、删除和移动,3.移动目录 Directory类的Move方法能够重命名或移动目录。方法原型为 public static void Move (string sourceDirName, string destDirName) 其中,sourceDirName为要移动的文件或目录的路径;destDirName为新位置的目标路径。 注意: de
8、stDirName参数指定的目标路径应为新目录。,7.2.4 FolderBrowserDialog对话框,FolderBrowserDialog对话框以树形控件的形式将指定路径的文件夹及其子文件夹显示出来,供用户浏览、创建或选择。调用FolderBrowserDialog的ShowDialog方法,可以打开对话框,如果用户在对话框中单击【确定】按钮,则对话框返回结果为DialogResult.OK,否则为DialogResult.Cancel。,7.2.4 FolderBrowserDialog控件,3. FolderBrowserDialog控件的主要属性 :,7.3 文件管理,Syste
9、m.IO命名空间中文件操作类: (1)File (2)FileInfo相同点:都能完成对文件的复制、移动、重命名、创建、打开、删除和追加到文件操作。不同点:FileInfo类提供实例化后的属性、方法File 只提供静态方法用法与Directory和DirectoryInfo相似。,7.3.1 文件复制、删除与移动,File类(1)判断文件是否存在调用File类的Exist方法可以判断是否存在指定的文件。(2)复制文件Copy (sourceFileName, destFileName,bool overwrite)(2) 删除文件Delete (string path)(3) 移动文件Move
10、 (sourceFileName, destFileName)注意:Move方法不提供创建目录的功能,要确保存在目标文件目录。,7.3.2 文件属性,1.设置或获取属性(1) 对File类:用SetAttributes方法,GetAttributes方法设置、获取。(2) 对FileInfo类:用Attributes属性设置、获取。(3)注意:FileAttributes的每个枚举值代表目录或者文件的一个属性,各个枚举值是按照2的幂排列的,即依次为20,21,22, 23 , 2.可以利用“与”、“或”操作设置或获取单个属性。,7.3.2 文件属性与设置(续),2.判断某个路径是目录还是文件
11、下面的代码演示了如何判断某个路径是目录还是文件: if (File.GetAttributes(path) ,7.3.4 OpenFileDialog控件和SaveFileDialog,1. 功能:用于显示用户打开文件的对话框。 2. 常用属性:,3. 常用方法:ShowDialog(),7.3.4 OpenFileDialog控件和SaveFileDialog,1.SaveFileDialog用于显示保存文件对话框,提示用户选择文件的保存位置。 2.调用SaveFileDialog的ShowDialog方法,将打开【另存为】对话框,如果用户在对话框中单击【保存】按钮,则保存该文件,并返回Di
12、alogResult.OK,否则返回DialogResult.Cancel。,【例7-1】利用FolderBrowerDialog、OpenFileDialog和SaveFileDialog对话框,设计一个Windows应用程序,实现将文件从一个目录复制到另一个目录的功能。,对话框控件综合举例,7.4 文件的读写,在System.IO命名空间中,提供了多种类用于进行数据文件和数据流的读写操作。主要有:1. 文件编码,提供了多种编码。2. 文本文件的读写。3. 二进制文件的读写。,7.4.1 文件的编码,1.文件编码 常见的文件编码方式有ASCII编码、Unicode编码、UTF8编码和ANSI
13、编码。 2.在System.Text命名空间中,有一个Encoding类,用于表示字符编码。对文件进行操作时,常用的编码方式有 Encoding.Default 表示操作系统的当前ANSI编码 Encoding.Unicode Unicode编码 Encoding.UTF8 UTF8编码,7.4.2 文本文件的读写,File类提供了非常方便的读写文本文件的方法。 1ReadAllText方法和AppendAllText方法ReadAllText方法打开一个文件,读取文件的每一行,将每一行添加为字符串的一个元素。然后关闭文件。常用原型为public static string ReadAllTe
14、xt(string path, Encoding encoding) AppendAllText方法用于将指定的字符串追加到文件中,如果文件不存在则自动创建该文件,常用原型为public static void AppendAllText(string path, string contents, Encoding encoding),7.4.2 文本文件的读写,2、ReadAllLines方法和WriteAllLines方法 ReadAllLines方法打开一个文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件。 WriteAllLines方法创建一个新文件,在其中写入指定的字符串
15、数组,然后关闭文件。如果目标文件已存在,则覆盖该文件 3StreamReader类和StreamWriter类 流是字节序列的抽象概念。流也是进行数据读取操作的基本对象,流提供了连续的字节流存储空间。 流有如下几种操作。 读取:从流中读取数据到变量中。 写入:把变量中的数据写入到流中。 定位:重新设置流的当前位置,以便随机读写。,7.4.2 文本文件的读写,StreamReader类提供了利用流来按行读取文本文件信息的方法。如果不指定编码,StreamReader的默认编码为UTF-8,而不是当前系统的ANSI编码。 StreamWriter类提供了按行写入文本信息的方法。与StreamRea
16、der类似,如果不指定编码,StreamWriter默认使用UTF-8编码,而不是当前系统的ANSI编码。 File类的Open方法先创建一个FileStream对象,然后使用FileStream对象对文件进行读取、写入、打开和关闭操作。,7.4.3 二进制文件的读写,例7-2:将随机产生的二进制数据写入文件,并验证写入结果是否正确。 Random r = new Random(); byte writeArray = new byte10; /用随机数填充指定字节数组的元素 r.NextBytes(writeArray); Console.WriteLine(“数组中的数据:“); for
17、(int i = 0; i writeArray.Length; i+) Console.WriteLine(“w0=1“, i, writeArrayi); ,7.4.3 二进制文件的读写,/将数据写入到文件,文件关闭前不允许其他进程操作该文件 FileStream fs = new FileStream(“test.bin“,FileMode.OpenOrCreate,FileAccess.Write, FileShare.None); BinaryWriter bw = new BinaryWriter(fs); Console.WriteLine(“正在写数据“); for (int
18、i = 0; i writeArray.Length; i+) bw.Write(writeArrayi); bw.Close(); fs.Close(); Console.WriteLine(“数据已写入到文件test.bin中“);,7.4.3 二进制文件的读写,/从文件中读取二进制数据 Console.WriteLine(“文件test.bin的内容如下:“); fs = new FileStream(“test.bin“, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs, System.Tex
19、t.Encoding.Default); Console.WriteLine(br.ReadByte(); while (br.PeekChar() != -1) Console.WriteLine(br.ReadByte(); br.Close(); fs.Close(); Console.ReadLine();,7.5 FileSystemWatcher组件,组件功能用于监视本地计算机、网络驱动器或远程计算机上的文件。 常用属性Filter : 文件筛选模式,确定监视哪些文件Path :要监视的目录路径NotifyFilter:要监视的更改类型EnableRaisingEvents :是否启用组件 常用事件Changed、Created、Deleted、Renamed 举例说明,FileSystemWatcher组件举例,【例7-3】演示FileSystemWatcher组件的用法。,