版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Visual C# Visual C# 案例教程案例教程l问题提出问题提出l期望效果期望效果图11-1 简单资源管理器主要功能主要功能1 1、显示磁盘文件组织结构、显示磁盘文件组织结构 2 2、文件复制粘贴、文件复制粘贴3 3、文件拖放、文件拖放4 4、文件监视、文件监视5 5、打开文件、打开文件技术点技术点1 1、树视图与列表视图应用、树视图与列表视图应用2 2、FileFile、DirectoryDirectory等类使用等类使用3 3、ClipBordClipBord类使用类使用4 4、拖放事件、方法、拖放事件、方法5 5、FileSystemWatcherFileSystemWatch
2、er类使用类使用lTreeNode类 在TreeView控件中的每一项称为一个节点,节点都是TreeNode类的对象 ,TreeNode具有如下成员:Text属性: 就是显示在节点上的文字。ImageIndex和SelectedImageIndex属性:节点显示的图标号Nodes属性 节点下包含的子节点集合Expand 方法:展开节点Collapse方法:折叠节点Toggle 方法:在展开与折叠之间切换示例:假定对已存在节点A。TreeNode AA=new TreeNode();/创建节点AA.Text=“AA”;/设置节点上显示文字AA.ImageIndex=1;/设置节点显示图像索引AA
3、.SelectedImageIndex=2;/设置节点被选中时的图像索引A.Nodes.Add(AA);/将节点加入到A节点下lListViewItem类类列表视图项属于ListViewItem类。 ListViewItem具有以下主要成员:Text:在列表项上显示的文字ImageIndex:列表项要显示的图像索引号SubItems:列表项的子项集合l示例:示例:ListViewItem li=new ListViewItemListViewItem li=new ListViewItem();();li.Textli.Text=c:Path;=c:Path;li.ImageIndexli.I
4、mageIndex=1;=1;li.SubItems.Addli.SubItems.Add(文件夹文件夹););li.SubItems.Add(18.8K);li.SubItems.Add(18.8K);li.SubItems.Add(2005-5-5 3:15:33);li.SubItems.Add(2005-5-5 3:15:33);listView1.Items.Add(li);listView1.Items.Add(li);l知识准备知识准备DirectoryDirectory类类 DirectoryDirectory来实现目录的管理来实现目录的管理, ,它是一个静态密封它是一个静态密
5、封类类(static ,sealed),(static ,sealed),即该类不能被实例化,也即该类不能被实例化,也不能被继承。不能被继承。 DirectoryDirectory的成员通过类名调用的成员通过类名调用 。DirectoryInfoDirectoryInfo类类 与与DirectoryDirectory类作用相似,但使用它必须先进行实类作用相似,但使用它必须先进行实例化。如果打算多次重用某个对象,可考虑使用例化。如果打算多次重用某个对象,可考虑使用 DirectoryInfoDirectoryInfo 的实例方法。的实例方法。 Directory类类 主要成员主要成员:GetLo
6、gicalDrives:检索此计算机上的逻辑驱动器的名称。GetDirectories:获取指定目录中子目录的名称。GetFiles:返回指定目录中的文件的名称。GetFileSystemEntries:返回指定目录中所有文件和子目录名称。CreateDirectory:按 path 的指定创建所有目录和子目录。Delete: 删除指定目录。 Exists:检测指定目录是否存在。GetParent:检索指定路径的父目录。lDirectoryInfo 类的主要成员类的主要成员Delete:从路径中删除 DirectoryInfo 及其内容。GetDirectories:返回当前目录的子目录。Ge
7、tFiles:返回当前目录的文件列表。Extension:获取表示文件扩展名部分的字符串。FullName:获取目录或文件的完整目录。CreationTime:获取或设置当前 FileSystemInfo 对象的创建时间。Exists获取指示目录是否存在的值。l基本思路:基本思路:将我的电脑设置为树的根。将我的电脑设置为树的根。搜索本地磁盘的逻辑盘符,添加到树中。搜索本地磁盘的逻辑盘符,添加到树中。对每个逻辑盘寻找根目录,添加到树中,成为当对每个逻辑盘寻找根目录,添加到树中,成为当前节点的子节点。前节点的子节点。对每个目录采用递归方式找到其下级目录并添加对每个目录采用递归方式找到其下级目录并添
8、加到树中成为当前节点的子节点到树中成为当前节点的子节点 l将我的电脑设置为树的根将我的电脑设置为树的根1、在窗体设计器中,为左边树视图创建新根、在窗体设计器中,为左边树视图创建新根节点。节点。2、设置节点的、设置节点的Text属性为属性为“我的电脑我的电脑”3、设置节点的、设置节点的Tag属性为属性为“我的电脑我的电脑”4、为该节点指定图像、为该节点指定图像l搜索本地磁盘的逻辑盘符,添加到树中。搜索本地磁盘的逻辑盘符,添加到树中。1、使用使用DirectoryDirectory的的GetLogicalDrivesGetLogicalDrives获取驱动器获取驱动器2 2、从系统获取每个驱动器图
9、标并加入到对应、从系统获取每个驱动器图标并加入到对应ImageListImageList3.3.为每个驱动器生成一个节点为每个驱动器生成一个节点4 4、为每个节点指定、为每个节点指定TextText和和ImageIndexImageIndex属性属性5 5、将每个驱动器的完整路径保存到节点的、将每个驱动器的完整路径保存到节点的TagTag属性中属性中6 6、为每个驱动器创建一个临时子节点,便于展开当前、为每个驱动器创建一个临时子节点,便于展开当前节点节点String s = Directory.GetLogicalDrives(); /获取驱动器获取驱动器foreach (string str
10、 in s)/取驱动器图标,放到取驱动器图标,放到ImagList中中 treeView1.ImageList.Images.Add(MyFile.GetFileIcon(str, true); /* 下面为驱动器生成一个节点,第一个参数为被创建节点上显示的文字,下面为驱动器生成一个节点,第一个参数为被创建节点上显示的文字,也就是也就是指定节点的指定节点的Text属性。第二个参数别创建节点的属性。第二个参数别创建节点的ImageIndex,第三个参数指定被,第三个参数指定被创建节点的创建节点的SelectedImageIndex。由于新加入的图标在由于新加入的图标在ImageList的末尾,所
11、以这里取的是最后一个图标的末尾,所以这里取的是最后一个图标 */node = new TreeNode(str, treeView1.ImageList.Images.Count - 1, treeView1.ImageList.Images.Count - 1); /* 将驱动器路径保存到节点的将驱动器路径保存到节点的Tag属性中,当我们需要取得某个属性中,当我们需要取得某个Node所代表所代表的目录的目录时,我们再从时,我们再从node的的Tag属性中获取属性中获取 */node.Tag = str; /将每个节点添加到树中。将每个节点添加到树中。treeView1.Nodes0指的是根节
12、点指的是根节点”我的电脑我的电脑” this.treeView1.Nodes0.Nodes.Add(node); /* 下面的代码主要检测该驱动器下是否还有目录,如果有,则在该节点下下面的代码主要检测该驱动器下是否还有目录,如果有,则在该节点下加入一个文本为加入一个文本为“-1”的节点,目的是为了在节点前出现的节点,目的是为了在节点前出现 +号,以便展开。号,以便展开。当该节点被展开,将文本为当该节点被展开,将文本为“-1”的节点删除,然后再加入代表子目录节的节点删除,然后再加入代表子目录节点。点。*/try String s2 = Directory.GetDirectories(node.
13、Tag.ToString(); if (s2.Length 0) node.Nodes.Add(new TreeNode(-1, 0, 0); catch l知识准备知识准备FileFile类类 File File 类用于典型文件的操作,如复制、移动、类用于典型文件的操作,如复制、移动、重命名、创建、打开、删除等。也可将重命名、创建、打开、删除等。也可将 File File 类类用于获取和设置文件属性。和用于获取和设置文件属性。和DirectoryDirectory类一样,类一样,FileFile也是静态密封类。也是静态密封类。FileInfoFileInfo类类 与与FileFile类作用相
14、似,但使用它必须先进行实例类作用相似,但使用它必须先进行实例化。如果打算多次重用某个对象,可考虑使用化。如果打算多次重用某个对象,可考虑使用 FileFile的实例方法。的实例方法。lFile类的主要成员类的主要成员CopyCopy:将现有文件复制到新文件。:将现有文件复制到新文件。CreateCreate:在指定路径中创建文件。:在指定路径中创建文件。DeleteDelete:删除指定的文件。如果指定的文件不存在,则不引发异常。:删除指定的文件。如果指定的文件不存在,则不引发异常。ExistsExists:确定指定的文件是否存在。:确定指定的文件是否存在。GetAttributesGetAt
15、tributes:获取在此路径上的文件的:获取在此路径上的文件的 FileAttributesFileAttributes。GetCreationTimeGetCreationTime、 GetLastAccessTimeGetLastAccessTime、 GetLastWriteTimeGetLastWriteTime:返:返回指定文件或目录的创建、上次访问、上次写入的日期和时间。回指定文件或目录的创建、上次访问、上次写入的日期和时间。MoveMove:将指定文件移到新位置,并提供指定新文件名的选项:将指定文件移到新位置,并提供指定新文件名的选项SetAttributesSetAttrib
16、utes: 设置指定路径上文件的指定的设置指定路径上文件的指定的 FileAttributesFileAttributesSetCreationTimeSetCreationTime、 SetLastAccessTimeSetLastAccessTime 、 SetLastWriteTimeSetLastWriteTime:设:设置创建、上次访问、上次写入该文件的日期和时间。置创建、上次访问、上次写入该文件的日期和时间。lFileInof类的主要成员类的主要成员FullNameFullName 获取目录或文件的完整目录。获取目录或文件的完整目录。Length Length 获取当前文件的大小。
17、获取当前文件的大小。Name Name 获取文件名。获取文件名。ExtensionExtension获取表示文件扩展名部分的字符串获取表示文件扩展名部分的字符串Attributes Attributes 获取或设置文件属性。获取或设置文件属性。IsReadOnlyIsReadOnly 获取或设置确定当前文件是否为只读的值。获取或设置确定当前文件是否为只读的值。LastAccessTimeLastAccessTime 获取或设置上次访问当前文件或目录的时间。获取或设置上次访问当前文件或目录的时间。LastWriteTimeLastWriteTime 获取或设置上次写入当前文件或目录的时间。获取或
18、设置上次写入当前文件或目录的时间。CreationTimeCreationTime 获取或设置当前获取或设置当前 FileSystemInfoFileSystemInfo 对象的创建时间。对象的创建时间。Exists Exists 获取指示文件是否存在的值。获取指示文件是否存在的值。CopyToCopyTo 将现有文件复制到新文件。将现有文件复制到新文件。Create Create 创建文件。创建文件。Delete Delete 永久删除文件。永久删除文件。l基本思路:基本思路:为了代码重用,将显示显示文件、文件夹列表的代码封装到一个方法中,为了代码重用,将显示显示文件、文件夹列表的代码封装到
19、一个方法中,方法定义如下:方法定义如下:void ShowFiles(Stringvoid ShowFiles(String Path) Path) PathPath为目录路径名为目录路径名调用该代码的示例如下调用该代码的示例如下/树视图中的某个节点被选中时:树视图中的某个节点被选中时:private void treeView1_AfterSelect(object sender, private void treeView1_AfterSelect(object sender, TreeViewEventArgsTreeViewEventArgs e) e) /Node.Tag/Node.
20、Tag中保存有节点代表目录的路径中保存有节点代表目录的路径 ShowFiles(e.Node.Tag.ToStringShowFiles(e.Node.Tag.ToString();(); 清 除 列 表 视 图 中 的原 有 信 息foreach目 录开 始当 前 路 径是 “ 我 的 电 脑” ?获 取 当 前 路 径下 的 子 目 录 列 表获 取 逻 辑 磁 盘 驱 动器 列 表foreach驱 动 器foreach目录foreach目录为 目 录 创 建 一 个 列 表 项获 取 目 录 关 联 图 标 加 入ImageList指 定 新 列 表 项Text,ImageIndex等
21、属 性将 目 录 路 径 保 存 到 列 表项 的 Tag属 性 中 ,创 建 列 表 项 的 SubItems将 列 表 项 加 入 视 图为 驱 动 器 创 建 一 个 列表 项获 取 驱 动 器 关 联 图 标加 入 ImageList指 定 新 列 表 项Text,ImageIndex等属 性将 驱 动 器 路 径 保 存 到列 表 项 的 Tag属 性 中 ,创 建 列 表 项 的SubItems将 列 表 项 加 入 视 图结 束是否获 取 当 前 路 径 下 的 文 件列 表foreach文 件foreach文件创 建 新 列 表 项 .l1、 清除列表视图中的原有信息清除列表视
22、图中的原有信息/将将ListViewListView中原有内容清空中原有内容清空listView1.Items.Clear(); listView1.Items.Clear(); /将大图标列表中内容清空将大图标列表中内容清空listView1.LargeImageList.Images.Clear(); listView1.LargeImageList.Images.Clear(); /将小图标列表中内容清空将小图标列表中内容清空listView1.SmallImageList.Images.Clear(); listView1.SmallImageList.Images.Clear();
23、l2、获取文件并显示到列表视图、获取文件并显示到列表视图/取指定路径下的所有文件取指定路径下的所有文件 string s = Directory.GetFiles(pathstring s = Directory.GetFiles(path);); foreach (string str foreach (string str in s) in s) /获取文件相关联的大图标并存入获取文件相关联的大图标并存入LargeImageListLargeImageList中中listView1.LargeImageList.Images.Add(MyFile.GetFileIcon(str, true
24、);listView1.LargeImageList.Images.Add(MyFile.GetFileIcon(str, true);/获取文件相关联的小图标并存入获取文件相关联的小图标并存入SmallImageListSmallImageList中中 listView1.SmallImageList.Images.Add(MyFile.GetFileIcon(str, false);listView1.SmallImageList.Images.Add(MyFile.GetFileIcon(str, false);/创建新的列表视图项创建新的列表视图项 li = new ListViewI
25、tem(Path.GetFileName(str), listView1. li = new ListViewItem(Path.GetFileName(str), listView1. SmallImageList.Images.CountSmallImageList.Images.Count - 1); - 1); /保存完整文件名到新视图项的保存完整文件名到新视图项的TagTag属性中属性中li.Tag = strli.Tag = str; ;FileInfo fi = new FileInfo(strFileInfo fi = new FileInfo(str););/添加子项,该子项
26、应该是列表的第二列,即文件大小(第一列为视图添加子项,该子项应该是列表的第二列,即文件大小(第一列为视图项的项的TextText属属性值)。这里将获取的文件长度除性值)。这里将获取的文件长度除10241024是以是以KBKB为为单位单位 * */ / li.SubItems.Add(fi.Lengthli.SubItems.Add(fi.Length / 1024).ToString(#,#0) + KB); / 1024).ToString(#,#0) + KB); /添加子项,获取并显示文件类型添加子项,获取并显示文件类型 li.SubItems.Add(MyFile.GetFileTyp
27、e(strli.SubItems.Add(MyFile.GetFileType(str); ); /添加子项,获取并显示文件创建时间添加子项,获取并显示文件创建时间 li.SubItems.Add(File.GetCreationTime(str).ToLongDateStringli.SubItems.Add(File.GetCreationTime(str).ToLongDateString();();/将该视图项添加到视图中将该视图项添加到视图中 this.listView1.Items.Add(li); this.listView1.Items.Add(li); lClipboard用
28、来将数据置于系统剪贴板中以及从剪贴用来将数据置于系统剪贴板中以及从剪贴板中获取数据,即实现数据的复制与粘贴。板中获取数据,即实现数据的复制与粘贴。数据复制的方法为数据复制的方法为SetData ,声明为:,声明为:public static void SetDataObject(string format ,object data);例如:例如:Clipboard. SetDataObject(DataFormats.Text ,“我要到我要到剪贴板中去剪贴板中去”) lDataFormats类成员包含了对数据格式的定义,类成员包含了对数据格式的定义,比如:比如:Bitmap Bitmap 指
29、定指定 Windows Windows 位图格式位图格式TextText 指定标准指定标准 ANSI ANSI 文本格式文本格式WaveAudioWaveAudio 指定指定 wave wave 音频格式音频格式FileDrop FileDrop 指定指定 Windows Windows 文件放置格式文件放置格式对文件进行复制时,复制到内存中的是由多个文件对文件进行复制时,复制到内存中的是由多个文件的路径名构成的字符串数组,格式为的路径名构成的字符串数组,格式为FileDropFileDrop /”复制复制”菜单被按下,将文件复制到剪贴板菜单被按下,将文件复制到剪贴板private void
30、cmiCopy_Click(object sender, EventArgs e) /* 列表视图的列表视图的SelectedItems包含了所有被选中项的集合,集合的包含了所有被选中项的集合,集合的Count属性包含了集合中元素的个数属性包含了集合中元素的个数*/创建一个字符串数组,数组的长度为列表视图中被选中的项数创建一个字符串数组,数组的长度为列表视图中被选中的项数string filslist = new stringlistView1.SelectedItems.Count;/将被选中项中保存的文件名称保存到数组中将被选中项中保存的文件名称保存到数组中for (intfor (int
31、 i = 0; i listView1.SelectedItems.Count; i+) i = 0; i listView1.SelectedItems.Count; i+) filslisti filslisti = listView1.SelectedItemsi.Tag.ToString(); = listView1.SelectedItemsi.Tag.ToString(); /复制到剪贴板复制到剪贴板Clipboard.SetData(DataFormats.FileDrop, filslist);lClipBordClipBord类的类的GetDataGetData方法将从系统剪
32、贴板中取出方法将从系统剪贴板中取出数据,即完成数据粘贴操作,完整声明如下:数据,即完成数据粘贴操作,完整声明如下:public static object GetData(stringpublic static object GetData(string format); format);l从剪贴板上获取被复制文件名的代码:从剪贴板上获取被复制文件名的代码: string files = string files = (string)Clipboard.GetData(DataFormats.File(string)Clipboard.GetData(DataFormats.FileDropD
33、rop););当数据格式为当数据格式为 DataFormats.FileDropDataFormats.FileDrop时,存放在时,存放在剪贴板上的数据为字符串数组,因此需对取出的数剪贴板上的数据为字符串数组,因此需对取出的数据进行类型转换,并将结果放到字符串数组中。据进行类型转换,并将结果放到字符串数组中。“粘贴粘贴”菜单被点击时执行步骤(伪代码)菜单被点击时执行步骤(伪代码)private void cmiPast_Click(object sender, EventArgsprivate void cmiPast_Click(object sender, EventArgs e) e)
34、 1 1、从剪贴板上获取格式为、从剪贴板上获取格式为DataFormats.FileDropDataFormats.FileDrop的数据:的数据: string files = (string)Clipboard.GetData(DataFormats.FileDropstring files = (string)Clipboard.GetData(DataFormats.FileDrop); ); 2 2、取得当前目录、取得当前目录 ,即复制文件的目标目录,即复制文件的目标目录3 3、检查要处理的是文件还是文件夹、检查要处理的是文件还是文件夹如果为文件如果为文件 ,则:,则:检查目标文件是
35、否存在检查目标文件是否存在文件复制文件复制: :File.Copy(filesi,newfilepath+filNameFile.Copy(filesi,newfilepath+filName, true);, true);若不是文件,则若不是文件,则复制文件夹:复制文件夹:CopyDir(filesi, newfilepath + filNameCopyDir(filesi, newfilepath + filName) )4 4、重复第、重复第3 3步,直到步,直到files files 中的所有文件处理完毕中的所有文件处理完毕lCopyDir是一个递归的方法,它复制目录及其下面是一个递归
36、的方法,它复制目录及其下面的文件和子目录,其流程可描述如下:的文件和子目录,其流程可描述如下: private void CopyDir(string source, string destprivate void CopyDir(string source, string dest) ) if if 目标目录不存在目标目录不存在 创建目标目录创建目标目录获取原目录下的所有文件获取原目录下的所有文件循环调用循环调用File.CopyFile.Copy方法将每个文件复制到目标目录下方法将每个文件复制到目标目录下获取原目录下的所有文件夹获取原目录下的所有文件夹循环调用循环调用CopyDirCopy
37、Dir方法自身复制文件夹到目标目录下方法自身复制文件夹到目标目录下 l实现文件拖放的步骤:实现文件拖放的步骤:1 1、设置、设置ListView1 ListView1 的的AllowDragAllowDrag属性为属性为True True 2 2、响应、响应ListView1ListView1的的ItemDragItemDrag事件事件 ,并调用,并调用DoDragDropDoDragDrop方法开始拖动。方法开始拖动。3 3、响应、响应DragOverDragOver事件,检查拖动数据格式,并事件,检查拖动数据格式,并决定允许目标组件进行的操作决定允许目标组件进行的操作 。4 4、响应、响应
38、DragDropDragDrop事件。在这个事件中,我们应事件。在这个事件中,我们应该完成文件的复制或移动等操作。该完成文件的复制或移动等操作。 lItemDrag事件 :当开始拖动ListView中的某个Item时会触发该事件 。事件参数e为ItemDragEventArgs对象,该对象的Item属性指出了被拖动的项。lDoDragDrop方法:方法:DoDragDrop方法启动拖放操作方法启动拖放操作 ,该方,该方法完整声明如下:法完整声明如下:public DragDropEffects DoDragDrop(object data, DragDropEffects allowedEff
39、ects);datadata:拖放时要传送的数据。:拖放时要传送的数据。allowedEffectsallowedEffects:拖放时被允许执行的操作。:拖放时被允许执行的操作。DragDropEffects为枚举类型,有以下取值:为枚举类型,有以下取值: ScrollScroll: 即将在放置目标中开始滚动,或当前正在滚动。即将在放置目标中开始滚动,或当前正在滚动。 AllAll: 从拖动源复制、移除数据,并将其滚动到放置目标中。从拖动源复制、移除数据,并将其滚动到放置目标中。 NoneNone:放置目标不接受该数据。:放置目标不接受该数据。 CopyCopy: 将数据复制到放置目标。将数
40、据复制到放置目标。 MoveMove:将拖动源的数据移动到放置目标。:将拖动源的数据移动到放置目标。 LinkLink: 将拖动源中的数据链接到放置目标将拖动源中的数据链接到放置目标 lDataObject类:类:实现基数据传输机制实现基数据传输机制。主要。主要用于数据的复制粘贴和拖放用于数据的复制粘贴和拖放 操作。主要成员操作。主要成员有:有:GetDataGetData public static object GetData(stringpublic static object GetData(string format); format);SetDataSetData public s
41、tatic void SetDataObject(stringpublic static void SetDataObject(string format format ,object data);object data);ItemDrag事件代码:事件代码:/拖放开始,设置拖放的文件名以及格式拖放开始,设置拖放的文件名以及格式private void listView1_ItemDrag(object sender, ItemDragEventArgs e)DataObject data = new DataObject();/获取所有被选中项代表的文件名,并存放到字符串数组获取所有被选中项
42、代表的文件名,并存放到字符串数组filslist中中string filslist = new stringlistView1.SelectedItems.Count;for (int i = 0; i listView1.SelectedItems.Count; i+) filslisti = listView1.SelectedItemsi.Tag.ToString(); data.SetData(DataFormats.FileDrop, filslist);listView1.DoDragDrop(data, System.Windows.Forms.DragDropEffects.A
43、ll);lDragOver事件:事件:检查拖动数据格式,并决定允许目标组件进行的操作。检查拖动数据格式,并决定允许目标组件进行的操作。private void listView1_DragOver(object sender, DragEventArgsprivate void listView1_DragOver(object sender, DragEventArgs e) e) /检查是否拖放的是文件检查是否拖放的是文件 if (e.Data.GetDataPresent(DataFormats.FileDropif (e.Data.GetDataPresent(DataFormats.
44、FileDrop) ) if (e.KeyState if (e.KeyState & 6) = 8) & 6) = 8)/检查是否按下了检查是否按下了SHIFTSHIFT键键 /未按未按SHIFT, SHIFT, 拖放操作为复制拖放操作为复制 e.Effect = System.Windows.Forms.DragDropEffects.Copye.Effect = System.Windows.Forms.DragDropEffects.Copy; ; elseelse/拖放操作为移动拖放操作为移动 e.Effect = System.Windows.Forms.DragD
45、ropEffects.Move; lDragDrop事件:事件:在拖放过程中用户松开鼠标时触发。可以在这个事件中,处理最终要完在拖放过程中用户松开鼠标时触发。可以在这个事件中,处理最终要完成的操作。成的操作。 /拖放鼠标松开后,执行文件的复制或移动操作拖放鼠标松开后,执行文件的复制或移动操作private void listView1_DragDrop(object sender, DragEventArgsprivate void listView1_DragDrop(object sender, DragEventArgs e) e) string files = (string)e.Da
46、ta.GetData(DataFormats.FileDrop string files = (string)e.Data.GetData(DataFormats.FileDrop);); / /将将filesfiles里面的文件复制到指定位置,代码省略里面的文件复制到指定位置,代码省略 / /如果是移动如果是移动, , 删除原始文件删除原始文件if(e.Effect = System.Windows.Forms.DragDropEffects.Moveif(e.Effect = System.Windows.Forms.DragDropEffects.Move) ) / / 代码省略代码省略
47、 lFileSystemWatcher的主要属性:的主要属性:FilterFilter属性。属性。FilterFilter属性主要用于对被监听的文件进行属性主要用于对被监听的文件进行过滤,即告诉过滤,即告诉FileSystemWatcherFileSystemWatcher监视哪些类型的文件。监视哪些类型的文件。例如,要监视例如,要监视C C盘根目录下的盘根目录下的TXTTXT文件,则可将文件,则可将FilterFilter属属性设置为性设置为 “ “C:C:* *.TXT”.TXT”。PathPath属性。获取或设置要监控的目录路径。属性。获取或设置要监控的目录路径。IncludeSubdi
48、rectoriesIncludeSubdirectories属性。属性。 表示是否监视表示是否监视PathPath下的下的子目录。子目录。NotifyFilterNotifyFilter属性属性 NotifyFilterNotifyFilter指定了哪些变化会产指定了哪些变化会产生生CheagedCheaged事件,比如文件名变化,文件长度变化等。事件,比如文件名变化,文件长度变化等。该属性是一个该属性是一个NotifyFiltersNotifyFilters枚举类型。枚举类型。lFileSystemWatcher 的主要事件的主要事件 :ChangedChanged事件事件 被监视目录或文件
49、的大小、系统属性、被监视目录或文件的大小、系统属性、时间、安全设置等发生变化时触发,当然,这还要取决时间、安全设置等发生变化时触发,当然,这还要取决于于于于NotifyFilterNotifyFilter属性的设置。属性的设置。CreatedCreated事件事件 当有新文件产生时触发,例如我们粘贴一当有新文件产生时触发,例如我们粘贴一个文件时,或保存一个新文件时,目标目录就会触发个文件时,或保存一个新文件时,目标目录就会触发CreatedCreated事件。事件。DelatedDelated事件事件 当文件被删除时触发。当文件被删除时触发。RanamedRanamed事件事件 当文件或目录名
50、称发生变化时触发。事件当文件或目录名称发生变化时触发。事件的参数中会提供原始路径名,文件名和更改后的路径名的参数中会提供原始路径名,文件名和更改后的路径名和文件名。和文件名。当监视到文件变化:当监视到文件变化:private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e) /循环查找循环查找ListView中与被改变文件或文件夹相对应的项中与被改变文件或文件夹相对应的项 foreach (ListViewItem li in this.listView1.Items) if (li.Tag.ToStri
51、ng() = e.FullPath) /更改列表项相应属性更改列表项相应属性 if (li.SubItems2.Text = 文件夹文件夹) li.SubItems3.Text=Directory.GetLastWriteTime(e.FullPath).ToLongDateString(); else FileInfo fi = new FileInfo(e.FullPath FileInfo fi = new FileInfo(e.FullPath);); li.SubItems1.Text=(fi.Length li.SubItems1.Text=(fi.Length /1024).To
52、String(#,#0) + KB; /1024).ToString(#,#0) + KB; string str= File.GetCreationTime(e.FullPath).ToLongDateString string str= File.GetCreationTime(e.FullPath).ToLongDateString();(); li.SubItems3.Text = str li.SubItems3.Text = str; ; break; l FileStream类类 FileStream实例用于读写文件中的数据。它把实例用于读写文件中的数据。它把文件看作字节流,而不
53、关心文件的结构。要文件看作字节流,而不关心文件的结构。要构造构造FileStream实例,需要以下实例,需要以下4个信息:个信息:1 1、要访问的文件、要访问的文件2 2、文件打开的模式、文件打开的模式 3 3、文件的访问方式、文件的访问方式4 4、共享方式、共享方式l文件打开的模式文件打开的模式 枚举枚举 FileMode的成员用来描述文件打开模式:的成员用来描述文件打开模式:CreateNewCreateNew:指定操作系统应创建新文件。如果文件已存:指定操作系统应创建新文件。如果文件已存在,则将引发异常。在,则将引发异常。CreateCreate:指定操作系统应创建新文件。如果文件已存在
54、,:指定操作系统应创建新文件。如果文件已存在,它将被改写它将被改写OpenOpen指定操作系统应打开现有文件。指定操作系统应打开现有文件。OpenOrCreateOpenOrCreate:指定操作系统应打开文件(如果文件存:指定操作系统应打开文件(如果文件存在);否则,应创建新文件。在);否则,应创建新文件。TruncateTruncate:指定操作系统应打开现有文件。文件一旦打:指定操作系统应打开现有文件。文件一旦打开,就将被截断为零字节大小。开,就将被截断为零字节大小。AppendAppend:打开现有文件并查找到文件尾,或创建新文件。:打开现有文件并查找到文件尾,或创建新文件。l文件的访
55、问方式文件的访问方式访问方式可以用访问方式可以用FileAccess枚举来表示。枚举来表示。FileAccess包含三个枚举值:包含三个枚举值:ReadRead:只读:只读WriteWrite:只写:只写ReadWriteReadWrite:读写:读写l共享方式共享方式指定文件是独占访问文件,还是允许其他流同时访指定文件是独占访问文件,还是允许其他流同时访问文件。共享方式可以用问文件。共享方式可以用FileShare枚举来表示枚举来表示 :NoneNone:谢绝共享当前文件。:谢绝共享当前文件。ReadRead允许随后打开文件读取。允许随后打开文件读取。WriteWrite允许随后打开文件写入
56、。允许随后打开文件写入。ReadWriteReadWrite允许随后打开文件读取或写入。允许随后打开文件读取或写入。DeleteDelete允许随后删除文件。允许随后删除文件。InheritableInheritable使文件句柄可由子进程继承使文件句柄可由子进程继承l创建创建FileStream / / 创建新文件。未指定文件访问方式,则该文件是可读写创建新文件。未指定文件访问方式,则该文件是可读写的的FileStream fs = new FileStream(C:Sample.txt, FileStream fs = new FileStream(C:Sample.txt, FileMo
57、de.CreateFileMode.Create); ); / / 创建新文件,该文件只写创建新文件,该文件只写 FileStream fs2 = new FileStream(C:Sample.txt, FileStream fs2 = new FileStream(C:Sample.txt, FileMode.Create, FileAccess.WriteFileMode.Create, FileAccess.Write); ); / / 打开文件,文件只读,不允许任何方式共享打开文件,文件只读,不允许任何方式共享FileStream fs3 = new FileStream(C:Sam
58、ple.txt, FileStream fs3 = new FileStream(C:Sample.txt, FFileMode.Open, FileAccess.Read, FileShare.NoneFFileMode.Open, FileAccess.Read, FileShare.None););lFileInfo的的Create、Open、OpenRead、OpenWrite方法也可以创建文件流。方法也可以创建文件流。FileInfo.OpenReadFileInfo.OpenRead():():提供的流只能读取现有的文件,提供的流只能读取现有的文件,FileInfo ().Open
59、WriteFileInfo ().OpenWrite():():可以进行读写访问。可以进行读写访问。FileInfo.OpenFileInfo.Open():():允许显式指定模式、访问方式和文件允许显式指定模式、访问方式和文件共享参数。共享参数。l例如:例如:FileInfo fi = new FileInfo(C:Sample.txtFileInfo fi = new FileInfo(C:Sample.txt); ); /创建创建FileInfoFileInfo实例实例FileStream fs = fi.OpenReadFileStream fs = fi.OpenRead(); ()
60、; /OpenRead/OpenRead方法创建方法创建一个只读文件流一个只读文件流l数据读取与写入数据读取与写入可以使用可以使用FileStream的的Read、ReadByte来读取数据来读取数据 ,WriteByte 和和 Write方法方法 向文件写入数据,使用向文件写入数据,使用Close方法关闭文件流。例:方法关闭文件流。例:int nBytesint nBytes=1024=1024;Byte ByteArray=new ByteArraynBytesByte ByteArray=new ByteArraynBytes ;int nBytesRead = fs.Read(ByteArray, 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/Z 154-2025安全与韧性城市韧性框架和原则
- 2025年艾防中心关于公开招聘参比实验室合同制聘用工作人员的备考题库及完整答案详解1套
- 2025年黄冈市文化和旅游局所属事业单位专项公开招聘工作人员备考题库及一套答案详解
- 土方承包合同
- 2026年生活品质提升指南合同
- 2026年建筑工程总承包合同
- 2025年张家港市第三人民医院自主招聘编外合同制卫技人员备考题库及参考答案详解一套
- 2025年郑州铁路局公开招聘1872人备考题库及答案详解一套
- 昆明市官渡区云南大学附属中学星耀学校2026年校园招聘备考题库及一套参考答案详解
- 中国电建集团昆明勘测设计研究院有限公司招聘20人备考题库及答案详解一套
- 2025下半年贵州遵义市市直事业单位选调56人考试笔试参考题库附答案解析
- 2025年淮北市相山区公开招考村(社区)后备干部66名笔试考试参考试题及答案解析
- 2025年贵州锦麟化工有限责任公司招聘备考题库及一套参考答案详解
- 2025年石家庄市公安局鹿泉分局公开招聘留置看护警务辅助人员30人的备考题库有答案详解
- 2025年高二语文上学期期末复习之理解性默写二70道题汇编(含答案)
- 360借款合同范本
- 【MOOC】3D工程图学-华中科技大学 中国大学慕课MOOC答案
- 乳腺癌的常规护理
- 人教版六年级上册语文词语专项练习题及答案
- 刑法学智慧树知到答案2024年上海财经大学
- 密码学原理与实践第三版答案
评论
0/150
提交评论