1第7章目录与文件管理7.1系统环境相关类7.2目录管理7.3文件管理7.4文件的读写7.5FileSystemWatcher组件27.1系统环境相关类.NET框架下,可通过下面的类获得一些系统环境的相关信息。1.Environment类该类提供当前环境和操作系统平台的相关信息,还提供了获取本地逻辑驱动器和特殊文件夹的方法。2.DriveInfo类提供了本地驱动器相关的详细信息。37.1.1Environment类常用的属性和方法CurrentDirectory属性:当前路径OSVersion属性:操作系统版本NewLine属性:获取当前环境的换行字符串UserNmae属性:当前登录到操作系统的用户GetLogicalDrives方法:计算机中逻辑驱动器名称的字符串数组。GetFolderPath方法:返回系统特殊文件夹的路径,如“我的电脑”47.1.2DriveInfo类使用DriveInfo可以确定当前可用的驱动器以及这些驱动器的类型还可以通过查询来获得驱动器更详细的数据,如容量和剩余空间等。书中P154给出了一些这两个类使用的例句,大家上机时可以试试,课上就不演示了。57.2目录管理在System.IO命名空间中,.NET框架提供了3种对目录进行管理的类,分别是Directory类、DirectoryInfo类和Path类。Directory类和DirectoryInfo类都可以用来对磁盘目录进行操作,如新建目录。Path类是对包含文件或目录路径信息的字符串做操作。67.2.1Directory和DirectoryInfo类区别:Directory类:只提供静态方法DirectoryInfo类:需要实例化才能使用DirectoryInfo类的构造函数形式如下:publicDirectoryInfo(stringpath);参数path表示目录所在的路径。例如:DirectoryInfodirInfo=newDirectoryInfo(@e:\temp);注意:path参数必须是合法的路径,也可用System.Environment.SpecialFolder下的枚举来获取特殊文件夹路径。7DirectoryInfo类的主要属性Exists:返回目录是否存在的Bool值FullName:当前路径的完整目录名Parent:获得上级目录CreationTime:获取或设置当前目录的创建时间。Root:获取根目录Attibutes:获取或设置当前目录属性,如只读,可利用FileAttibutes类提供的常量,如FileAttibutes.ReadOnly8Directory类提供的静态方法注意:Directory只提供了方法,这些方法都是静态方法,通过类名直接调用。利用这些方法进行可以建立、删除、移动目录等操作,一般需指定目录参数。CreateDirectoryDeleteMoveExistsGetCurrentDirectory更多的方法见P155表7-397.2.2Path类1.Path类用于对包含文件或目录路径信息的String实例执行操作。注意:Path可以仅仅是一个路径,也可以是路径及文件名。2.常用方法:GetDirectoryName方法GetExtension方法GetFileName方法:文件名和扩展名GetFileNameWithoutExtension方法GetFullPath方法107.2.3目录的创建、删除和移动1.创建目录Directory类的CreateDirectory方法用于创建指定路径中的所有目录。publicstaticDirectoryInfoCreateDirectory(stringpath)其中参数path为要创建的目录路径。举例:Directory.CreateDirectory(c:\\test);Directory.CreateDirectory(c:\\test\\t1\\t2);112.删除目录Directory类的Delete方法用于删除指定的目录常用的方法原型为:publicstaticvoidDelete(stringpath,boolrecursive)其中:path参数不区分大小写,可以是相对于当前工作目录的相对路径,也可以是绝对路径。recursive是一个布尔值,如果要移除path中的目录(包括所有子目录和文件),则为true;否则为false。123.移动目录Directory类的Move方法能够重命名或移动目录。方法原型为:publicstaticvoidMove(stringsourceDirName,stringdestDirName)其中:sourceDirName为要移动的文件或目录的路径;destDirName为新位置的目标路径。注意:destDirName参数指定的目标路径应为新目录,如果目标目录已存在,会导致异常。137.2.4FolderBrowserDialog对话框FolderBrowserDialog对话框是系统提供的标准对话框之一,用来选择一个目录。以树形控件的形式将指定路径的文件夹及其子文件夹显示出来,供用户浏览、创建或选择。调用FolderBrowserDialog的ShowDialog方法可以打开对话框。如果用户在对话框中单击“确定”按钮,则返回DialogResult.OK,否则为DialogResult.CancelSelectedPath属性可获得用户选择的路径147.2.4FolderBrowserDialogFolderBrowserDialog的主要属性:属性名含义Description获取或设置对话框中在树视图控件上显示的说明文本RootFolder获取或设置从其开始浏览的根文件夹SelectedPath获取或设置用户选定的路径157.3文件管理System.IO命名空间中文件操作类:(1)File(2)FileInfo相同点:都能完成对文件的复制、移动、重命名、创建、打开、删除和追加到文件操作。不同点:FileInfo类提供实例化后的属性、方法,而File只提供静态方法。用法与Directory和DirectoryInfo相似。通常与Path对象配合使用167.3.1文件操作一般利用File类提供的方法对文件进行操作。判断文件是否存在:调用File类的Exist方法可以判断是否存在指定的文件。复制文件:File.Copy(sourceFileName,destFileName,booloverwrite)删除文件:File.Delete(stringpath)移动文件:File.Move(sourceFileName,destFileName)注意:Move方法不提供创建目录的功能,要确保存在目标文件目录。17例如,下面的代码在文件原路径下复制了一个备份:stringpath1=@c:\temp\MyTest.txt;stringpath2=@c:\temp\MyTestBack.txt;System.IO.File.Copy(path1,path2,true);187.3.2文件属性的设置与获取(1)对File类:用SetAttributes方法,GetAttributes方法设置、获取。(2)对FileInfo类:用Attributes属性设置、获取。注意:FileAttributes的每个枚举值代表目录或者文件的一个属性,各个枚举值是按照2的幂排列的,即依次为20,21,22,23…2.可以利用“与”、“或”操作设置或获取单个属性。197.3.2文件属性与设置(续)判断某个路径是目录还是文件:下面的代码演示了如何判断某个路径是目录还是文件:if((File.GetAttributes(path)&FileAttributes.Directory)==FileAttributes.Directory){//这个判断是如何进行的?Console.WriteLine(“{0}”是目录,path);}else{Console.WriteLine(“{0}”是文件,path);}207.3.4OpenFileDialog和SaveFileDialogOpenFileDialog:显示打开文件对话框。常用属性:属性名说明ShowReadOnly确定是否在对话框中显示只读复选框ReadOnlyChecked指示是否选中只读复选框MultiSelect指示对话框是否允许选择多个文件FileName获取或设置一个包含在文件对话框中选定的文件名的字符串Filter获取或设置当前文件名筛选器字符串3.常用方法:ShowDialog()217.3.4OpenFileDialog和SaveFileDialogSaveFileDialog用于显示保存文件对话框,提示用户选择文件的保存位置。调用SaveFileDialog的ShowDialog方法,将打开【另存为】对话框。如果用户在对话框中单击【保存】按钮,则保存该文件,并返回DialogResult.OK,否则返回DialogResult.Cancel。22【例7-1】利用FolderBrowerDialog、OpenFileDialog和SaveFileDialog对话框,设计一个Windows应用程序,实现将文件从一个目录复制到另一个目录的功能。注意:运行前需要在相关盘符下事先建立一个temp文件夹对话框控件综合举例237.4文件的读写在System.IO命名空间中,提供了多种类用于进行数据文件和数据流的读写操作。主要有:1.文件编码,提供了多种编码。2.文本文件的读写。3.二进制文件的读写。247.4.1文件的编码1.文件编码常见的文件编码方式有ASCII编码、Unicode编码、UTF8编码和ANSI编码。2.在System.Text命名空间中,有一个Encoding类,用于表示字符编码。对文件进行操作时,常用的编码方式有:Encoding.Default:操作系统的当前ANSI编码Encoding.Unicode:Unicode编码Encoding.UTF8:UTF8编码,网页经常使用,将一个Unicode字符编为1-4个字节。257.4.2文本文件的读写文本文件是没有任何格式,只记录表示文件内容字符的文件,如*.txt文件。File类提供了非常方便的读写文本文件的方法。主要有下列方法:ReadAllTextAppendAllTextReadAllLinesWriteAllLines26ReadAllText方法ReadAllText方法打开一个文件,读取文件的每一行,将其添加为字符串的一个元素。读取结束后关闭文件。常用原型为:publicstaticstringReadAllText(stringpath,Encodingencoding)其中:path为文件路径,encoding为编码方式,无法自动检测出汉字的UTF-8编码,一般可以指定为Encoding.Default。27AppendAllText方法AppendAllText方法用于将指定的字符串追加到文件中。如果文件不存在则自动创建该文件。常用原型为:publicstaticvoidAppendAllText(stringpath,stringcontents,Encodingencoding)其中参数contents为追加到文件的字符串。28ReadAllLines和WriteAllLines方法ReadAllLines方法打开一个文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件。根据回车换行来确定一行,实际是一“段”WriteAllLines方法创建一个新文件,在其中写入指定的字符串数组,然后关闭文件。如果目标文件已存在,则覆盖该文件。297.4.2文本文件的读写:流流是字节序列的抽象概念。流也是进行数据读