《C#语言程序设计项目教程》第10章 文 件写字字帖_第1页
《C#语言程序设计项目教程》第10章 文 件写字字帖_第2页
《C#语言程序设计项目教程》第10章 文 件写字字帖_第3页
《C#语言程序设计项目教程》第10章 文 件写字字帖_第4页
《C#语言程序设计项目教程》第10章 文 件写字字帖_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章文件本章导读:本章的主要内容是学习文件。然后通过项目“我的资源管理器”为导向,三个任务(制作我的资源管理器窗体、显示电脑逻辑磁盘符号、显示文件详细信息)为驱动,学习有关C#语言的文件相关知识,包括File和FileInfo类的使用、Directory类和DirectoryInfo类的使用、TreeView控件和ListView控件的使用,本项目的完成初步学习文件的相关知识以及TreeView控件和ListView控件的基本应用。第10章文件

——任务一制作我的资源管理器窗体一、任务描述:制作如下图所示“我的资源管理器”界面。二、知识准备:1TreeView控件2ListView控件二、知识准备:1、TreeView控件TreeView控件也叫做树控件,主要用来表示具有层次结构的节点,其中有包含子节点的节点叫父节点,被包含节点叫子节点。在Windows操作系统的资源管理器功能的左边用来显示文件和文件夹结构的就是TreeView控件。对TreeView控件的主要操作有:添加和删除节点,为节点添加图标等。二、知识准备:1、TreeView控件publicvirtualintAdd(TreeNodenode)(1)添加节点对TreeView控件的节点进行操作时,都要用到Nodes属性。语法:说明:node表示要添加到节点集合中的一个节点,返回值为该节点的索引值。举例:为名为treeView1的TreeView控件添加一个叫“我的电脑”的子节点。TreeNodetn=newTreeNode(“我的电脑”);treeView1.Nodes.Add(tn);二、知识准备:1、TreeView控件publicvoidRemove(TreeNodenode)(2)删除节点语法:说明:node表示要移除的节点。通常需要删除选中的节点,可以通过SelectecNode属性来删除节点,例如:treeView.Nodes.Remove(treeView.SelectedNode);表示删除被选中的节点。二、知识准备:1、TreeView控件(2)为节点添加图标2)设置TreeView控件的ImageList属性值为imageList1。方法有两种,一种是如图示通过属性窗口设置;另一种方法是通过代码设置:treeView1.ImageList=imageList1;1)先添加一个ImageList控件imageList1,并设置好图片内容。通过属性窗口设置通过代码设置二、知识准备:1、TreeView控件(3)为节点设置图像设置节点的图像,是通过设置节点的ImageIndex和SelectedImageIndex属性,其值为ImageList控件中的图像索引值。其中,ImageIndex属性是节点正常和展开状态下的图像,SelectedImageIndex是节点被选中状态下的图像。设置TreeView控件的所有节点图像:treeView1.ImageIndex=0;treeView1.SelectedImageIndex=1;二、知识准备:1、TreeView控件(3)为节点设置图像设置某个树节点的图像,下面的代码表示,申请一个名为“我的电脑”的树节点,设置其图标,然后加入到treeView1树控件中。TreeNodetn=newTreeNode(“我的电脑”);tn.ImageIndex=0;tn.SelectedImageIndex=1;treeView1.Nodes.Add(tn);二、知识准备:2、ListView控件ListView控件又叫列表视图控件,主要用来显示带图标的项的列表,它的显示可以分为小图标、大图标和列表3种视图。在Windows操作系统的资源管理器功能的右边用来显示文件和文件夹详细信息的就是ListView控件。对ListView控件的主要操作跟前面的TreeView控件相似,主要有添加和移除项,为项添加图标等。二、知识准备:(1)添加项对ListView控件的节点进行操作时,都要用到Items属性。语法:publicvirtualListViewItemAdd(stringtext,intimageIndex)2、ListView控件说明:第一个参数text表示项的文本;第二个参数表示项的图像索引。举例:为名为listView1的ListView控件添加一个叫“我的电脑”的子项。listView1.Items.Add(“我的电脑”);二、知识准备:(2)移除项语法:publicvoidRemoveAt(intindex)2、ListView控件说明:index表示要移除项的索引。举例:移除被选中的项可以采用以下代码:listView1.Items.RemoveAt(listView1.SelectedItem[0].Index);二、知识准备:(2)移除项要移除所有项可以采用Clear方法,语法:publicvirtualvoidClear()2、ListView控件如果需要删除所有选中的节点,可以通过SelectecItems属性的Clear方法来清除所有选中的项:listView1.SelectedItems.Clear();二、知识准备:(3)设置控件的选择项通过ListView控件的Selectd属性可以设置控件的选中项。Selectd属性主要用于获取或设置一个值,语法:publicboolSelected{get;set}2、ListView控件说明:如果该值为true则表示选中此项,为false则表示未选中此项。举例:设置选中listView1中的第2项。listView1.Items[1].Selected=true;//索引从0开始二、知识准备:(4)为项添加图标ListView控件主要有以下几种视图:List视图、Details视图、SmallIcon视图和LargeIcon视图,分别表示列表视图、详细列表视图、小图标和大图标。本项目中,选择的是Details视图。2、ListView控件二、知识准备:(4)为项添加图标2、ListView控件2)设置ListView控件的SmallImageList或LargeImageList属性值为步骤1中的ImageList控件。方法有两种,一种是如图所示通过属性窗口设置;另一种方法是通过代码设置:listView1.SmallImageList=imageList1;1)首先添加ImageList控件,并设置好图片内容。通过属性窗口设置通过代码窗口设置二、知识准备:(4)为项添加图标2、ListView控件3)为每项设置图像设置向的图像,是通过设置项的ImageIndex,其值为ImageList控件中的图像索引值。为ListView控件添加名为“我的电脑”项,其图标为ImageList控件中索引为2的图片:listView1.Items.Add(“我的电脑”);treeView1.Items[0].ImageIndex=2;三、任务分析:1、如图所示,资源管理器的构成主要由以下几种控件组成:MenuStrip菜单控件、ToolStrip工具栏控件、TreeView树控件和ListView类表视图控件。四、任务实施:1、新建1个名为“ZYGLQ”的窗体应用程序。2、在工具箱拖动MenuStrip控件放到窗体上方。添加以下菜单,并设置相应的快捷键:文件(F)、编辑(E)、查看(V)、收藏(A)、工具(T)、帮助(H)。3、在工具箱拖动ToolStrip控件放到菜单控件下方。添加工具栏如下:组织、包含到库中、共享。此工具栏的功能在此项任务中未实现,有兴趣的同学可以自行完成功能。四、任务实施:4、在工具箱拖动ImageList控件,为ImageList控件添加图标文件,“我的电脑”图标、“文件”图标和“文件夹”图标,如图所示。四、任务实施:5、在工具箱拖动TreeView控件放到窗体左侧,命名为treeDirectory。如图所示,设置TreeView控件的ImageList属性。四、任务实施:6、在工具箱拖动ListView控件放到窗体左侧,命名为lstDetail,设置View属性为Details(列表视图)。单击“EditColumns”,打开如右图所示的编辑列文本框,设置显示的列属性。本任务主要是设置列的Text属性。五、任务小结:1、设置TreeView控件的ImageList属性两种方法:(1)直接通过属性窗口设置,如图所示。(2)在后台通过代码设置:this.treeDirectory.ImageList=imageList1;五、任务小结:2、ListView控件可以通过如图所示ImageIndex属性设置列所对应的图标。第10章文件

——任务二显示电脑逻辑磁盘符号

一、任务描述:对任务一中的“我的资源管理器”窗体进行完善,添加方法使得左边的TreeView控件显示电脑的逻辑磁盘符号,运行如下图所示。二、知识准备:1File和FileInfo类2Directory和DirectoryInfo类二、知识准备:1、File和FileInfo类File类和FileInfo类两者的主要区别是:File不能实例化,只提供静态方法,而后者可以实例化,提供的方法和File类相似。C#语言中通过File和FileInfo类来创建、复制、删除、移动和打开文件。在File类中提供了一些静态方法,使用这些方法可以完成以上功能,但File类不能建立对象。FileInfo类使用方法和File类基本相同,但FileInfo类能建立对象。在使用这两个类时需要引用System.IO命名空间。二、知识准备:1、File和FileInfo类(1)File类File类的方法都是静态的,如果只想要执行一个操作,使用File类方法比使用FileInfo类实例方法效率更高。File类的常见方法和说明:方

法说

明AppendText返回StreamWrite,向指定文件添加数据;如文件不存在,就创建该文件。Create按指定路径建立新文件Copy复制指定文件到新文件夹。。Delete删除指定文件。Exists检查指定路径的文件是否存在,存在,返回true。GetAttributes获取指定文件的属性。GetCreationTime返回指定文件或文件夹的创建日期和时间。GetLastAccessTime返回上次访问指定文件或文件夹的创建日期和时间。GetLastWriteTime返回上次写入指定文件或文件夹的创建日期和时间。Open返回指定文件相关的FileStream,并提供指定的读/写许可。OpenRead返回指定文件相关的只读FileStream。OpenWrite返回指定文件相关的读/写FileStream。SetAttributes设置指定文件的属性。SetCretionTime设置指定文件的创建日期和时间。SetLastAccessTime设置上次访问指定文件的日期和时间。SetLastWriteTime设置上次写入指定文件的日期和时间。二、知识准备:1、File和FileInfo类(2)FileInfo类FileInfo类的使用方法与File类类似,没有静态方法,如果要在对象上进行多种方法调用,使用FileInfo类效率更高。FileInfo类有以下常用的属性:FileInfo类的常用属性属

性说

明Attributes获取或设置当前Filesysteminfo的Fileattributes。CreateTime获取或设置当前Filesysteminfo对象的创建时间。Exists检查指定目录是否存在的值。Extension获取表示文件扩展名部分的字符串。FullName获取目录或文件的完整目录。Length获取当前文件的大小Name获取文件名。二、知识准备:1、File和FileInfo类(3)文件的基本操作1)判断文件是否存在①File类的Exists方法该方法声明如下:publicstaticboolExists(stringpath)说明:参数path表示要测试的目录路径。如存在则返回true,否则为false,如果path为空或零长度字符串,也返回false。举例:if(File.Exists(@"D:\test.txt"))//判断在D盘下是否存在test.txt文件说明:如果不指明路径,默认为应用程序的当前路径。例如:File.Exists("test.txt")二、知识准备:1、File和FileInfo类(3)文件的基本操作1)判断文件是否存在②FileInfo类的Exists属性该方法声明如下:publicoverrideboolExists{get;}说明:如果文件存在,属性值则为true,否则为false。举例:FileInfofinfo=newFileInfo(@"C:\text.txt");if(finfo.Exists)//判断finfo是否存在,即是在C盘下是否存在text.txt文件二、知识准备:1、File和FileInfo类(3)文件的基本操作2)创建文件①File类的Creat方法,该方法声明如下:publicstaticFileStreamCreate(stringpath)publicstaticFileStreamCreate(stringpath,intbufferSize)publicstaticFileStreamCreate(stringpath,intbufferSize,FileOptionoptions)publicstaticFileStreamCreate(stringpath,intbufferSize,FileOptionoptions,FileSecurityfilesecurity)参数说明:path:文件名。bufferSize:用于读取和写入文件的已放入缓冲区的字节数。options:FileOption值之一,它描述如何创建或改写该文件。fileSecurity:FileSecurity值之一,它确定文件的访问控制和审核安全性。二、知识准备:1、File和FileInfo类(3)文件的基本操作2)创建文件②FileInfo类的Creat方法该方法声明如下:publicFileStreamCreate()说明:默认情况下,该方法将向所有用户授予对新文件的完全读写访问权限。举例:FileInfofinfo=newFileInfo(@"D:\Test.txt");//创建FileInfo对象finfo.Create();//创建文件二、知识准备:1、File和FileInfo类(3)文件的基本操作3)打开文件①读/写方式使用File类的Open方法可以实现以读/写方式打开文件,此方法可以打开指定路径上的FileStream对象,且具有读/写访问权限。语法:publicstaticFileStreamOpen(stringpath,FileModemode)说明:参数path表示要打开的文件路径;打开文件有3种方式:1、读/写方式;2、只读方式;3、写入方式。可以使用File类或FileInfo类实现文件的打开操作,本节将以File类为例讲解。二、知识准备:1、File和FileInfo类(3)文件的基本操作3)打开文件①读/写方式参数mode为FileMode枚举值之一。FileMode枚举值成员及说明如表所示。FileMode枚举值成员及说明成

员说

明CreateNew创建新文件。Create创建新文件。如果文件已经存在,则覆盖它。Open打开已经存在的文件。OpenOrCreate如果文件存在,则打开;否则创建新文件。Truncat打开存在文件,且文件打开时被截断为0字节大小。Append打开现有文件并查找到文件尾,或创建新文件。二、知识准备:1、File和FileInfo类(3)文件的基本操作3)打开文件①读/写方式举例:打开可读写文件FileStreamfs=File.Open(@"D:\Test.txt",FileMode.Open);说明:以可读写方式打开D盘下的Test.txt文件。以读写方式创建文件并打开(文件不存在)FileStreamfs=File.Open(@"D:\Test.txt",FileMode.OpenOrCreate);说明:以读写方在D盘下创建Test.txt文件,并打开。二、知识准备:1、File和FileInfo类(3)文件的基本操作3)打开文件①读/写方式举例:打开文件时,清空文件中的内容FileStreamfs=File.Open(@"D:\Test.txt",FileMode.Truncate);说明:打开D盘下的Test.txt文件,并清空文件的内容,然后进行读写。打开文件追加操作FileStreamfs=File.Open(@"D:\Test.txt",FileMode.Append);说明:打开D盘下的Test.txt文件,并在末尾进行追加操作。二、知识准备:1、File和FileInfo类(3)文件的基本操作3)打开文件②只读方式语法:publicstaticFileStreamOpenRead(stringpath)说明:参数path表示要打开文件的路径。举例:FileStreamfs=File.OpenRead(@"D:\Test.txt");二、知识准备:1、File和FileInfo类(3)文件的基本操作3)打开文件③写入方式语法:publicstaticFileStreamOpenWrite(stringpath)说明:参数path表示要打开文件的路径。举例:FileStreamfs=File.OpenWrite(@"D:\Test.txt");二、知识准备:1、File和FileInfo类(3)文件的基本操作4)复制文件①File类的Copy方法。Copy方法有以下两种重载形式,语法:publicstaticvoidCopy(stringsourceFileName,stringdestFileName)publicstaticvoidCopy(stringsourceFileName,stringdestFileName,booloverwrite)说明:sourceFileName:要复制的文件。destFileName:目标文件的名称。如果是第一种重载形式,不能是现有文件。overwrite:为true表示可以改写目标文件,否则为false。举例:File.Copy(@"D:\Test.txt",@"E:\Test.txt");//将D盘的Test.txt复制到E盘根目录下。二、知识准备:1、File和FileInfo类(3)文件的基本操作4)复制文件②FileInfo类的CopyTo方法。CopyTo方法有以下两种重载形式,语法:publicFileInfovoidCopyTo(stringdestFileName)publicFileInfovoidCopyTo(stringdestFileName,booloverwrite)说明:

destFileName:要复制到的新文件的名称。overwrite:为true表示为现有文件改写,否则为false。第一种重载形式返回值为带有完全限定路径的新文件,第二种重载形式的返回值为新文件。举例:FileInfofinfo=newFileInfo(@"D:\Test.txt");//创建FileInfo对象finfo.CopyTo(@"E:\Test.txt",true);//复制文件到E盘根目录下二、知识准备:1、File和FileInfo类(3)文件的基本操作5)移动文件①File类的Move方法。语法:publicstaticvoidMove(stringsourceFileName,stringdestFileName)说明:sourceFileName:要移动的文件名称。destFileName:文件的新路径。举例:File.Move(@"D:\Test.txt",@"E:\Test.txt");//将D盘的Test.txt移动到E盘根目录下。File.Move(@"D:\Test.txt",@"E:\Test1.txt");//将D盘的Test.txt移动到E盘根目录下,并修改名称为Test1。二、知识准备:1、File和FileInfo类(3)文件的基本操作5)移动文件②FileInfo类的MoveTo方法。语法:publicvoidMoveTo(stringdestFileName)说明:destFileName:文件移动到的新路径,可以指定不同文件名。举例:FileInfofinfo=newFileInfo(@"D:\Test.txt");//创建FileInfo对象finfo.MoveTo(@"E:\Test1.txt");//移动文件到E盘根目录下,并改名为Test1二、知识准备:1、File和FileInfo类(3)文件的基本操作6)删除文件①File类的Delete方法。语法:publicstaticvoidDelete(stringpath)说明:path:要删除的文件名称。举例:File.Delete(@"D:\Test.txt");//将D盘下的Test.txt文件删除。注意:如果当前被删除的文件正在被使用,则删除发生异常。二、知识准备:1、File和FileInfo类(3)文件的基本操作6)删除文件②FileInfo类的Delete方法。语法:publicoverridevoidDelete()举例:FileInfofinfo=newFileInfo(@"D:\Test.txt");//创建FileInfo对象finfo.Delete();//将D盘下的Test.txt文件删除。二、知识准备:2、Directory和DirectoryInfo类Directory类来创建、复制、删除、移动文件夹。在Directory类中提供了一些静态方法,使用这些方法可以完成以上功能。但Directory类不能建立对象。DirectoryInfo类使用方法和Directory类基本相同,但DirectoryInfo类能建立对象。在使用这两个类时需要引用System.IO命名空间。二、知识准备:2、Directory和DirectoryInfo类Directory类主要用于对文件夹的创建、复制、移动、删除、重命名、获取或设置与文件夹的创建、访问等相关的时间信息的操作。Directory类的常用方法及说明如表所示。(1)Directory类二、知识准备:2、Directory和DirectoryInfo类(1)Directory类Directory类的常用方法和说明方

法说

明CreateDirectory按指定路径创建所有文件夹和子文件夹。Delete删除指定文件夹。Exists检查指定目录的文件夹是否存在,存在,返回true。Move将指定文件或文件夹及其内容移动到新位置。GetCreationTime返回指定文件或文件夹的创建日期和时间。GetCurrentDirectory获取应用程序的当前工作文件夹。GetDirectories获取指定文件夹中子文件夹的名称。GetDirectoryRoot返回指定路径的卷信息、根信息或两者同时返回。GetFiles返回指定文件夹中子文件的名称。GetFileSystemEntries返回指定文件夹中所有文件和子文件的名称。GetLastAccessTime返回上次访问指定文件或文件夹的创建日期和时间。GetLastWriteTime返回上次写入指定文件或文件夹的创建日期和时间。GetLogicalDrives检索计算机中的所有驱动器,例如A:、C:等等。GetParent获取指定路径的父文件夹,包括绝对路径和相对路径。SetCreationTime设置指定文件或文件夹的创建日期和时间。SetCurrentDirectory将应用程序的当前工作文件夹设置指定文件夹。SetLastAccessTime设置上次访问指定文件或文件夹的日期和时间。SetLastWriteTime设置上次写入指定文件夹的日期和时间。二、知识准备:2、Directory和DirectoryInfo类DirectoryInfo类使用的相关方法与Directory类类似。除此之外,DirectoryInfo类有以下常用的属性,如表所示。(2)DirectoryInfo类DirectoryInfo类的常用属性属

性说

明Attributes获取或设置当前Filesysteminfo的Fileattributes。CreatTime获取或设置当前Filesysteminfo对象的创建时间。Exists检查指定目录是否存在的值。FullName获取目录或文件的完整目录。Parent获取指定目录的父目录。Name获取DirectoryInfo实例的名称。二、知识准备:2、Directory和DirectoryInfo类publicstaticboolExists(stringpath)(3)文件夹的基本操作1)判断文件夹是否存在①Directory类的Exists方法该方法声明如下:说明:参数path表示要测试的目录路径。如存在则返回true,否则为false。举例:if(Directory.Exists(@"C:\Dir1\Dir2"))//判断是否存在C:\Dir1\Dir2目录二、知识准备:2、Directory和DirectoryInfo类publicoverrideboolExists{get;}(3)文件夹的基本操作1)判断文件夹是否存在②DirectoryInfo类的Exists属性语法:说明:属性值表明如果目录存在,则为true,否则为false。举例:DirectoryInfodinfo=newDirectoryInfo(@"C:\Dir1\Dir2");if(dinfo.Exists)//判断dinfo是否存在,即是是否存在C:\Dir1\Dir2目录二、知识准备:2、Directory和DirectoryInfo类publicstaticDirectoryInfoCreatDirectory(stringpath)publicstaticDirectoryInfoCreatDirectory(stringpath,DirectorySecuritydirectorySecurity)(3)文件夹的基本操作2)创建文件夹①Directory类的CreatDirectory方法该方法声明如下:说明:参数path表示要创建的目录路径。参数directorySecurity表示要应用于此目录的访问控制。举例:Directory.CreatDirectory(@"C:\Dir1\Dir2");//在C:\Dir1文件夹下创建名为Dir2子文件夹二、知识准备:2、Directory和DirectoryInfo类publicvoidCreat()publicvoidCreat(DirectorySecuritydirectorySecurity)(3)文件夹的基本操作2)创建文件夹②DirectoryInfo类的Creat方法该方法声明如下:说明:参数directorySecurity表示要应用于此目录的访问控制。举例:DirectoryInfodinfo=newDirectoryInfo(@"C:\Dir1\Dir2");//创建DirectoryInfo对象dinfo.Create();//创建文件夹二、知识准备:2、Directory和DirectoryInfo类publicstaticDirectoryInfoMove(stringsourceDirName,stringdestDirName)(3)文件夹的基本操作3)移动文件夹①Directory类的Move方法该方法声明如下:说明:参数sourceDirName表示要移动的文件或目录的路径。参数destDirName表示移动过后的新路径。举例:Directory.Move(@"C:\Dir1\Dir2",@"C:\New");//将C:\Dir1下的Dir2文件夹移动到D盘的New文件夹中二、知识准备:2、Directory和DirectoryInfo类publicvoidMoveTo(stringdestDirName)(3)文件夹的基本操作3)移动文件夹②DirectoryInfo类的MoveTo方法该方法声明如下:说明:参数destDirName表示要将此目录移动到的目标位置的名称或路径。举例:DirectoryInfodinfo=newDirectoryInfo(@"C:\Dir1");dinfo.MoveTo(@"C:\New\Dir1");//移动到New文件夹下注意:Move方法和MoveTo只能移动统一磁盘根目录下的文件夹,也就是说C盘的文件件只能在C盘内移动。二、知识准备:2、Directory和DirectoryInfo类publicstaticVoidDelete(stringpath)publicstaticVoidDelete(stringpath,boolrecursive)(3)文件夹的基本操作4)删除文件夹①Directory类的Delete方法该方法声明如下:说明:参数path表示要移除的空目录或目录的名称。参数recursive如果为true表示要同时移除path中的目录、子目录和文件,若为false,则仅当目录为空时才可删除。举例:Directory.Delete(@"c:\Dir1\Dir2",true);//将C:\Dir1下的Dir2文件夹及所有子文件和子文件夹都移除二、知识准备:2、Directory和DirectoryInfo类publicoverridevoidDelete()publicvoidDelete(boolrecursive)(3)文件夹的基本操作4)删除文件夹②DirectoryInfo类的Delete方法该方法声明如下:说明:参数recursive如果为true则表示要同时移除目录、其子目录和文件,若为false,则仅当目录为空时才可删除。举例:DirectoryInfodinfo=newDirectoryInfo(@"C:\Dir1");dinfo.Delete();//删除文件夹C:\Dir1及其子文件夹和子文件三、任务分析:1、如何显示电脑的逻辑盘符可以通过Directory类的GetLogicalDrives()方法得到所有的电脑盘符,因为其返回值是字符串数组,所有可以通过foreach语句对所有盘符进行遍历,对得到的每个盘符作为节点添加到TreeView控件中。2、电脑的逻辑盘符应该作为TreeView控件根节点的子节点,通过如下代码实现:treeDirectory.Nodes[0].Nodes.Add(disk);treeDirectory.Nodes[0]代表TreeView控件的根节点。三、任务分析:3、当该目录下有子目录时,节点处应该显示“+”号,否则则不显示“+”。添加方法DetectSub(TreeNodenowNode)来检测nowNode节点下是否有子节点。如果有子节点,则通过nowNode.Nodes.Add("tmp")为该节点添加一个名为“tem”的临时节点。该条代码的作用仅仅是为了“+”的显示而已。四、任务实施:1、打开任务一中建立的窗体应用程序,在代码文件中加入如下方法,用于显示电脑的逻辑盘符。voidBindLogicDrive(){//显示逻辑盘符

inti=0;//遍历所有电脑盘符

foreach(stringdiskinDirectory.GetLogicalDrives()){//添加所有逻辑盘符作为树控件中根节点的子节点

treeDirectory.Nodes[0].Nodes.Add(disk);//为逻辑盘添加图标

treeDirectory.Nodes[0].Nodes[i].ImageIndex=2;//添加节点被选中的图标

treeDirectory.Nodes[0].Nodes[i].SelectedImageIndex=2;//检查当前节点是否还有子节点,

DetectSub(treeDirectory.Nodes[0].Nodes[i]);i++;}}四、任务实施:2、添加方法stringGetPath(TreeNodenode),用获取某树节点node所代表的文件目录路径。//获取节点路径stringGetPath(TreeNodenode){//用root表示根节点(我的电脑)TreeNoderoot=treeDirectory.Nodes[0];stringpath="";//如果不是根节点

while(node!=root){//node.Text为节点显示出来的文本if(node.Text.IndexOf(":")>0){path=node.Text+path;}else{path=node.Text+"\\"+path;

}node=node.Parent;}returnpath;//返回节点所代表的路径}四、任务实施:2、添加方法stringGetPath(TreeNodenode),用获取某树节点node所代表的文件目录路径。//node.Text为节点显示出来的文本

if(node.Text.IndexOf(":")>0){path=node.Text+path;}else{path=node.Text+"\\"+path;}node=node.Parent;}returnpath;//返回节点所代表的路径

}可以在纸上画出树形结构以及所代表的文件路径,然后按步骤自行分析。四、任务实施:3、添加方法voidDetectSub(TreeNodenowNode)用于检测nowNode节点下是否有字节点,如果有则显示“+”,没有则不显示。voidDetectSub(TreeNodenowNode){//获取当前节点路径,步骤2中有具体实现方法

stringpath=GetPath(nowNode);if(path=="")//为最小节点,即叶子节点{return;}//不为最小节点

else{//创建文件夹对象dir

DirectoryInfodir=newDirectoryInfo(path);try{//判断当前目录是否有子目录if(dir.GetDirectories().Length>0){//添加一个临时节点作为+显示nowNode.Nodes.Add("tmp");}catch(Exceptione){;}}}四、任务实施:4、为TreeNode控件添加BeforeExpand方法,该方法表示节点展开前。privatevoidtreeDirectory_BeforeExpand(objectsender,TreeViewCancelEventArgse){ViewSub(e.Node);//查看节点的子节点,在步骤5中实现

//设置节点的图标

if(e.Node.ImageIndex<3){e.Node.ImageIndex=1;}}四、任务实施:5、添加voidViewSub(TreeNodenowNode)方法,该方法可以显示节点nowNode的所有子节点。//显示子目录

voidViewSub(TreeNodenowNode){stringpath=GetPath(nowNode);//如果当前节点路径为空

if(path==""){return;}else{//如果当前节点路径不为空DirectoryInfodir=newDirectoryInfo(path);//创建目录对象

inti=0;四、任务实施:5、添加voidViewSub(TreeNodenowNode)方法,该方法可以显示节点nowNode的所有子节点。

//清空所有子节点

nowNode.Nodes.Clear();//遍历该目录下面的所有文件foreach(DirectoryInfosubdirindir.GetDirectories()){//把每个子文件的路径作为节点所显示的文本,同时加入子节点到父节点中

nowNode.Nodes.Add(subdir.Name);DetectSub(nowNode.Nodes[i]);i++;}}}五、任务小结:相同点:均能对目录进行操作区别:DirectoryInfo类必须被实例化后才能使用,而Directory类则只提供了静态的方法。如果多次使用某个对象一般使用DirectoryInfo类;如果仅执行某一个操作则使用Directory类提供的静态方法效率更高一些。1、Directory类和DirectoryInfo类的区别五、任务小结:相同点:均能对文件进行操作区别:File是静态类,其中所有方法都是静态的,可以通过类名直接调用,不需要实例化。而FileInfo是普通类,只有实例化对象后才可以调用其中的方法。如果只是对文件进行少量的操作,如判断文件是否存在之类或者对很多的文件进行操作,建议使用File类,可以避免频繁创建和释放对象的系统开销。如果是对一个文件进行大量的操作,建议使用FileInfo类。那么为什么有时还使用FileInfo呢?因为每次通过File类调用某个方法时,都要占用一定的cpu处理时间来进行安全检查,即使使用不同的File类的方法重复访问同一个文件时也是如此。而FileInfo类只在创建FileInfo对象时执行一次安全检查。2、File类和FileInfo类的区别第10章文件

——任务三显示文件详细信息一、任务描述:对任务二中的“我的资源管理器”窗体进行完善,添加方法ViewDetail()使得右边的ListView控件显示相应节点目录下的文件及文件夹的详细信息,运行如下图所示。ListView控件中显示的列包括:名称、类型、大小和修改时间。其中文件夹没有大小,文件有大小,文件大小单位包括Bytes、KB、MB和GB。二、任务准备:1、获取文件的基本信息可以通过FileInfo类的各种属性来获取文件的基本信息,具体说明如表所示。FileInfo类的属性表属

性说

明CreateTime获取文件创建时间。LastAccessTime获取上次访问该文件的时间。LastWriteTime获取上次写入文件的时间。Name获取文件名称。FullName获取文件的完整目录。DirectoryName获取文件的文章路径。IsReadOnly获取文件是否只读。Length获取文件长度(字节)。二、任务准备:1、获取文件的基本信息FileInfofinfo=newnewFileInfo(@"D:\Test.txt");//创建FileInfo对象stringstrCTime,strLtime,strWTime,strName,strFName,strDName,strISread;//定义字符串存放文件基本信息longlgLen;//存放文件长度strCTime=finfo.CreationTime.ToshortDataString();//获取文件创建时间strLtime=finfo.LasrAccessTime.ToshortDataString();//获取文件最后访问时间strWTime=finfo.LastWriteTime.ToshortDataString();//获取文件最后写入时间strName=finfo.Name;//获取文件名称strFName=finfo.FullName;//获取文件完整目录strDName=finfo.DirectoryName;//获取文件完整路径strISread=finfo.IsReadOnly;//获取文件是否只读lgLen=finfo.Length;//获取文件长度举例:获取目录D:\下文件Test.txt的的基本信息。二、任务准备:1、获取文件的基本信息strCTime:2014-03-01strLtime:2014-03-01strWTime:2014-02-21strName:Test.txtstrFName:D:\Test.txtstrDName:D:strISread:falselgLen:867980获取值为:三、任务分析:1、如何区分文件还是文件夹。本任务中区分文件还是文件夹的方式是通过遍历的时候同时实现的,如下:foreach(DirectoryInfosubdirindir.GetDirectories())遍历文件夹dir下的所有子文件夹。foreach(FileInfofileindir.GetFiles())遍历文件夹dir下的所有文件。文件的三、任务分析:2、如何按照如下单位:Bytes、KB、MB和GB显示文件的大小。通过类FileInfo的GetFileSize方法,可以求出文件的大小,但是单位是字节。在ListView控件中显示时需要显示成其他单位。如果文件的大小为:filesize,则进行如下运算可以进行单位换算:(double)filesize/1024换算成KB(double)filesize/(1024*1024)换算成MB(double)filesize/(1024*1024*1024)换算成GB四、任务实施:1、在任务二的基础上完善“我的资源管理器”窗体应用程序。添加方法privatestringGetFileSize(FileInfofile)用于返回文件的大小。

privatestringGetFileSize(FileInfofile){

stringresult=null;

longfilesize=file.Length;//如果文件大小达到GBif(filesize>=1024*1024*1024)

{result=string.Format("{0:########0.00}GB",(double)filesize/(1024*1024*1024));}elseif(filesize>=1024*1024)//文件大小达到MB{result=string.Format("{0:####0.00}MB",(double)filesize/(1024*1024));}四、任务实施:1、在任务二的基础上完善“我的资源管理器”窗体应用程序。添加方法privatestringGetFileSize(FileInfofile)用于返回文件的大小。

elseif(filesize>=1024)//文件大小达到KB{result=string.Format("{0:####0.00}KB",(double)filesize/1024);}else{result=string.Format("{0}Bytes",filesize);}returnresult;}四、任务实施:2、添加方法voidViewDetail(TreeNodenowNode),其作用是让ListView控件现实TreeView控件中选中节点所代表文件夹下包含的子文件和子文件夹的名称、类型、大小、修改时间。voidViewDetail(TreeNodenowNode){stringpath=GetPath(nowNode);//选中TreeNode节点所代表文件的路径lstDetail.Items.Clear();//清除ListView控件下的所有项if(path==""){//选中为根节点时,代表“我的电脑”节点foreach(stringdiskinDirectory.GetL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论