第11章文件管理_第1頁
第11章文件管理_第2頁
第11章文件管理_第3頁
第11章文件管理_第4頁
第11章文件管理_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Visual C# Visual C# 案例教程案例教程l問題提出問題提出l期望效果期望效果圖11-1 簡單資源管理器主要功能主要功能1 1、顯示磁盤文件組織結(jié)構(gòu)、顯示磁盤文件組織結(jié)構(gòu) 2 2、文件復(fù)制粘貼、文件復(fù)制粘貼3 3、文件拖放、文件拖放4 4、文件監(jiān)視、文件監(jiān)視5 5、打開文件、打開文件技術(shù)點技術(shù)點1 1、樹視圖與列表視圖應(yīng)用、樹視圖與列表視圖應(yīng)用2 2、FileFile、DirectoryDirectory等類使用等類使用3 3、ClipBordClipBord類使用類使用4 4、拖放事件、方法、拖放事件、方法5 5、FileSystemWatcherFileSystemWatch

2、er類使用類使用lTreeNode類 在TreeView控件中的每一項稱為一個節(jié)點,節(jié)點都是TreeNode類的對象 ,TreeNode具有如下成員:Text屬性: 就是顯示在節(jié)點上的文字。ImageIndex和SelectedImageIndex屬性:節(jié)點顯示的圖標號Nodes屬性 節(jié)點下包含的子節(jié)點集合Expand 方法:展開節(jié)點Collapse方法:折疊節(jié)點Toggle 方法:在展開與折疊之間切換示例:假定對已存在節(jié)點A。TreeNode AA=new TreeNode();/創(chuàng)建節(jié)點AA.Text=“AA”;/設(shè)置節(jié)點上顯示文字AA.ImageIndex=1;/設(shè)置節(jié)點顯示圖像索引AA

3、.SelectedImageIndex=2;/設(shè)置節(jié)點被選中時的圖像索引A.Nodes.Add(AA);/將節(jié)點加入到A節(jié)點下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來實現(xiàn)目錄的管理來實現(xiàn)目錄的管理, ,它是一個靜態(tài)密封它是一個靜態(tài)密

5、封類類(static ,sealed),(static ,sealed),即該類不能被實例化,也即該類不能被實例化,也不能被繼承。不能被繼承。 DirectoryDirectory的成員通過類名調(diào)用的成員通過類名調(diào)用 。DirectoryInfoDirectoryInfo類類 與與DirectoryDirectory類作用相似,但使用它必須先進行實類作用相似,但使用它必須先進行實例化。如果打算多次重用某個對象,可考慮使用例化。如果打算多次重用某個對象,可考慮使用 DirectoryInfoDirectoryInfo 的實例方法。的實例方法。 Directory類類 主要成員主要成員:GetLo

6、gicalDrives:檢索此計算機上的邏輯驅(qū)動器的名稱。GetDirectories:獲取指定目錄中子目錄的名稱。GetFiles:返回指定目錄中的文件的名稱。GetFileSystemEntries:返回指定目錄中所有文件和子目錄名稱。CreateDirectory:按 path 的指定創(chuàng)建所有目錄和子目錄。Delete: 刪除指定目錄。 Exists:檢測指定目錄是否存在。GetParent:檢索指定路徑的父目錄。lDirectoryInfo 類的主要成員類的主要成員Delete:從路徑中刪除 DirectoryInfo 及其內(nèi)容。GetDirectories:返回當前目錄的子目錄。Ge

7、tFiles:返回當前目錄的文件列表。Extension:獲取表示文件擴展名部分的字符串。FullName:獲取目錄或文件的完整目錄。CreationTime:獲取或設(shè)置當前 FileSystemInfo 對象的創(chuàng)建時間。Exists獲取指示目錄是否存在的值。l基本思路:基本思路:將我的電腦設(shè)置為樹的根。將我的電腦設(shè)置為樹的根。搜索本地磁盤的邏輯盤符,添加到樹中。搜索本地磁盤的邏輯盤符,添加到樹中。對每個邏輯盤尋找根目錄,添加到樹中,成為當對每個邏輯盤尋找根目錄,添加到樹中,成為當前節(jié)點的子節(jié)點。前節(jié)點的子節(jié)點。對每個目錄采用遞歸方式找到其下級目錄并添加對每個目錄采用遞歸方式找到其下級目錄并添

8、加到樹中成為當前節(jié)點的子節(jié)點到樹中成為當前節(jié)點的子節(jié)點 l將我的電腦設(shè)置為樹的根將我的電腦設(shè)置為樹的根1、在窗體設(shè)計器中,為左邊樹視圖創(chuàng)建新根、在窗體設(shè)計器中,為左邊樹視圖創(chuàng)建新根節(jié)點。節(jié)點。2、設(shè)置節(jié)點的、設(shè)置節(jié)點的Text屬性為屬性為“我的電腦我的電腦”3、設(shè)置節(jié)點的、設(shè)置節(jié)點的Tag屬性為屬性為“我的電腦我的電腦”4、為該節(jié)點指定圖像、為該節(jié)點指定圖像l搜索本地磁盤的邏輯盤符,添加到樹中。搜索本地磁盤的邏輯盤符,添加到樹中。1、使用使用DirectoryDirectory的的GetLogicalDrivesGetLogicalDrives獲取驅(qū)動器獲取驅(qū)動器2 2、從系統(tǒng)獲取每個驅(qū)動器圖

9、標并加入到對應(yīng)、從系統(tǒng)獲取每個驅(qū)動器圖標并加入到對應(yīng)ImageListImageList3.3.為每個驅(qū)動器生成一個節(jié)點為每個驅(qū)動器生成一個節(jié)點4 4、為每個節(jié)點指定、為每個節(jié)點指定TextText和和ImageIndexImageIndex屬性屬性5 5、將每個驅(qū)動器的完整路徑保存到節(jié)點的、將每個驅(qū)動器的完整路徑保存到節(jié)點的TagTag屬性中屬性中6 6、為每個驅(qū)動器創(chuàng)建一個臨時子節(jié)點,便于展開當前、為每個驅(qū)動器創(chuàng)建一個臨時子節(jié)點,便于展開當前節(jié)點節(jié)點String s = Directory.GetLogicalDrives(); /獲取驅(qū)動器獲取驅(qū)動器foreach (string str

10、 in s)/取驅(qū)動器圖標,放到取驅(qū)動器圖標,放到ImagList中中 treeView1.ImageList.Images.Add(MyFile.GetFileIcon(str, true); /* 下面為驅(qū)動器生成一個節(jié)點,第一個參數(shù)為被創(chuàng)建節(jié)點上顯示的文字,下面為驅(qū)動器生成一個節(jié)點,第一個參數(shù)為被創(chuàng)建節(jié)點上顯示的文字,也就是也就是指定節(jié)點的指定節(jié)點的Text屬性。第二個參數(shù)別創(chuàng)建節(jié)點的屬性。第二個參數(shù)別創(chuàng)建節(jié)點的ImageIndex,第三個參數(shù)指定被,第三個參數(shù)指定被創(chuàng)建節(jié)點的創(chuàng)建節(jié)點的SelectedImageIndex。由于新加入的圖標在由于新加入的圖標在ImageList的末尾,所

11、以這里取的是最后一個圖標的末尾,所以這里取的是最后一個圖標 */node = new TreeNode(str, treeView1.ImageList.Images.Count - 1, treeView1.ImageList.Images.Count - 1); /* 將驅(qū)動器路徑保存到節(jié)點的將驅(qū)動器路徑保存到節(jié)點的Tag屬性中,當我們需要取得某個屬性中,當我們需要取得某個Node所代表所代表的目錄的目錄時,我們再從時,我們再從node的的Tag屬性中獲取屬性中獲取 */node.Tag = str; /將每個節(jié)點添加到樹中。將每個節(jié)點添加到樹中。treeView1.Nodes0指的是根節(jié)

12、點指的是根節(jié)點”我的電腦我的電腦” this.treeView1.Nodes0.Nodes.Add(node); /* 下面的代碼主要檢測該驅(qū)動器下是否還有目錄,如果有,則在該節(jié)點下下面的代碼主要檢測該驅(qū)動器下是否還有目錄,如果有,則在該節(jié)點下加入一個文本為加入一個文本為“-1”的節(jié)點,目的是為了在節(jié)點前出現(xiàn)的節(jié)點,目的是為了在節(jié)點前出現(xiàn) +號,以便展開。號,以便展開。當該節(jié)點被展開,將文本為當該節(jié)點被展開,將文本為“-1”的節(jié)點刪除,然后再加入代表子目錄節(jié)的節(jié)點刪除,然后再加入代表子目錄節(jié)點。點。*/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 類用于典型文件的操作,如復(fù)制、移動、類用于典型文件的操作,如復(fù)制、移動、重命名、創(chuàng)建、打開、刪除等。也可將重命名、創(chuàng)建、打開、刪除等。也可將 File File 類類用于獲取和設(shè)置文件屬性。和用于獲取和設(shè)置文件屬性。和DirectoryDirectory類一樣,類一樣,F(xiàn)ileFile也是靜態(tài)密封類。也是靜態(tài)密封類。FileInfoFileInfo類類 與與FileFile類作用相

14、似,但使用它必須先進行實例類作用相似,但使用它必須先進行實例化。如果打算多次重用某個對象,可考慮使用化。如果打算多次重用某個對象,可考慮使用 FileFile的實例方法。的實例方法。lFile類的主要成員類的主要成員CopyCopy:將現(xiàn)有文件復(fù)制到新文件。:將現(xiàn)有文件復(fù)制到新文件。CreateCreate:在指定路徑中創(chuàng)建文件。:在指定路徑中創(chuàng)建文件。DeleteDelete:刪除指定的文件。如果指定的文件不存在,則不引發(fā)異常。:刪除指定的文件。如果指定的文件不存在,則不引發(fā)異常。ExistsExists:確定指定的文件是否存在。:確定指定的文件是否存在。GetAttributesGetAt

15、tributes:獲取在此路徑上的文件的:獲取在此路徑上的文件的 FileAttributesFileAttributes。GetCreationTimeGetCreationTime、 GetLastAccessTimeGetLastAccessTime、 GetLastWriteTimeGetLastWriteTime:返:返回指定文件或目錄的創(chuàng)建、上次訪問、上次寫入的日期和時間?;刂付ㄎ募蚰夸浀膭?chuàng)建、上次訪問、上次寫入的日期和時間。MoveMove:將指定文件移到新位置,并提供指定新文件名的選項:將指定文件移到新位置,并提供指定新文件名的選項SetAttributesSetAttrib

16、utes: 設(shè)置指定路徑上文件的指定的設(shè)置指定路徑上文件的指定的 FileAttributesFileAttributesSetCreationTimeSetCreationTime、 SetLastAccessTimeSetLastAccessTime 、 SetLastWriteTimeSetLastWriteTime:設(shè):設(shè)置創(chuàng)建、上次訪問、上次寫入該文件的日期和時間。置創(chuàng)建、上次訪問、上次寫入該文件的日期和時間。lFileInof類的主要成員類的主要成員FullNameFullName 獲取目錄或文件的完整目錄。獲取目錄或文件的完整目錄。Length Length 獲取當前文件的大小。

17、獲取當前文件的大小。Name Name 獲取文件名。獲取文件名。ExtensionExtension獲取表示文件擴展名部分的字符串獲取表示文件擴展名部分的字符串Attributes Attributes 獲取或設(shè)置文件屬性。獲取或設(shè)置文件屬性。IsReadOnlyIsReadOnly 獲取或設(shè)置確定當前文件是否為只讀的值。獲取或設(shè)置確定當前文件是否為只讀的值。LastAccessTimeLastAccessTime 獲取或設(shè)置上次訪問當前文件或目錄的時間。獲取或設(shè)置上次訪問當前文件或目錄的時間。LastWriteTimeLastWriteTime 獲取或設(shè)置上次寫入當前文件或目錄的時間。獲取或

18、設(shè)置上次寫入當前文件或目錄的時間。CreationTimeCreationTime 獲取或設(shè)置當前獲取或設(shè)置當前 FileSystemInfoFileSystemInfo 對象的創(chuàng)建時間。對象的創(chuàng)建時間。Exists Exists 獲取指示文件是否存在的值。獲取指示文件是否存在的值。CopyToCopyTo 將現(xiàn)有文件復(fù)制到新文件。將現(xiàn)有文件復(fù)制到新文件。Create Create 創(chuàng)建文件。創(chuàng)建文件。Delete Delete 永久刪除文件。永久刪除文件。l基本思路:基本思路:為了代碼重用,將顯示顯示文件、文件夾列表的代碼封裝到一個方法中,為了代碼重用,將顯示顯示文件、文件夾列表的代碼封裝到

19、一個方法中,方法定義如下:方法定義如下:void ShowFiles(Stringvoid ShowFiles(String Path) Path) PathPath為目錄路徑名為目錄路徑名調(diào)用該代碼的示例如下調(diào)用該代碼的示例如下/樹視圖中的某個節(jié)點被選中時:樹視圖中的某個節(jié)點被選中時:private void treeView1_AfterSelect(object sender, private void treeView1_AfterSelect(object sender, TreeViewEventArgsTreeViewEventArgs e) e) /Node.Tag/Node.

20、Tag中保存有節(jié)點代表目錄的路徑中保存有節(jié)點代表目錄的路徑 ShowFiles(e.Node.Tag.ToStringShowFiles(e.Node.Tag.ToString();(); 清 除 列 表 視 圖 中 的原 有 信 息foreach目 錄開 始當 前 路 徑是 “ 我 的 電 腦” ?獲 取 當 前 路 徑下 的 子 目 錄 列 表獲 取 邏 輯 磁 盤 驅(qū) 動器 列 表foreach驅(qū) 動 器foreach目錄foreach目錄為 目 錄 創(chuàng) 建 一 個 列 表 項獲 取 目 錄 關(guān) 聯(lián) 圖 標 加 入ImageList指 定 新 列 表 項Text,ImageIndex等

21、屬 性將 目 錄 路 徑 保 存 到 列 表項 的 Tag屬 性 中 ,創(chuàng) 建 列 表 項 的 SubItems將 列 表 項 加 入 視 圖為 驅(qū) 動 器 創(chuàng) 建 一 個 列表 項獲 取 驅(qū) 動 器 關(guān) 聯(lián) 圖 標加 入 ImageList指 定 新 列 表 項Text,ImageIndex等屬 性將 驅(qū) 動 器 路 徑 保 存 到列 表 項 的 Tag屬 性 中 ,創(chuàng) 建 列 表 項 的SubItems將 列 表 項 加 入 視 圖結(jié) 束是否獲 取 當 前 路 徑 下 的 文 件列 表foreach文 件foreach文件創(chuàng) 建 新 列 表 項 .l1、 清除列表視圖中的原有信息清除列表視

22、圖中的原有信息/將將ListViewListView中原有內(nèi)容清空中原有內(nèi)容清空listView1.Items.Clear(); listView1.Items.Clear(); /將大圖標列表中內(nèi)容清空將大圖標列表中內(nèi)容清空listView1.LargeImageList.Images.Clear(); listView1.LargeImageList.Images.Clear(); /將小圖標列表中內(nèi)容清空將小圖標列表中內(nèi)容清空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) /獲取文件相關(guān)聯(lián)的大圖標并存入獲取文件相關(guān)聯(lián)的大圖標并存入LargeImageListLargeImageList中中l(wèi)istView1.LargeImageList.Images.Add(MyFile.GetFileIcon(str, true

24、);listView1.LargeImageList.Images.Add(MyFile.GetFileIcon(str, true);/獲取文件相關(guān)聯(lián)的小圖標并存入獲取文件相關(guān)聯(lián)的小圖標并存入SmallImageListSmallImageList中中 listView1.SmallImageList.Images.Add(MyFile.GetFileIcon(str, false);listView1.SmallImageList.Images.Add(MyFile.GetFileIcon(str, false);/創(chuàng)建新的列表視圖項創(chuàng)建新的列表視圖項 li = new ListViewI

25、tem(Path.GetFileName(str), listView1. li = new ListViewItem(Path.GetFileName(str), listView1. SmallImageList.Images.CountSmallImageList.Images.Count - 1); - 1); /保存完整文件名到新視圖項的保存完整文件名到新視圖項的TagTag屬性中屬性中l(wèi)i.Tag = strli.Tag = str; ;FileInfo fi = new FileInfo(strFileInfo fi = new FileInfo(str););/添加子項,該子項

26、應(yīng)該是列表的第二列,即文件大?。ǖ谝涣袨橐晥D添加子項,該子項應(yīng)該是列表的第二列,即文件大?。ǖ谝涣袨橐晥D項的項的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); ); /添加子項,獲取并顯示文件創(chuàng)建時間添加子項,獲取并顯示文件創(chuàng)建時間 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、來將數(shù)據(jù)置于系統(tǒng)剪貼板中以及從剪貼用來將數(shù)據(jù)置于系統(tǒng)剪貼板中以及從剪貼板中獲取數(shù)據(jù),即實現(xiàn)數(shù)據(jù)的復(fù)制與粘貼。板中獲取數(shù)據(jù),即實現(xiàn)數(shù)據(jù)的復(fù)制與粘貼。數(shù)據(jù)復(fù)制的方法為數(shù)據(jù)復(fù)制的方法為SetData ,聲明為:,聲明為:public static void SetDataObject(string format ,object data);例如:例如:Clipboard. SetDataObject(DataFormats.Text ,“我要到我要到剪貼板中去剪貼板中去”) lDataFormats類成員包含了對數(shù)據(jù)格式的定義,類成員包含了對數(shù)據(jù)格式的定義,比如:比如:Bitmap Bitmap 指

29、定指定 Windows Windows 位圖格式位圖格式TextText 指定標準指定標準 ANSI ANSI 文本格式文本格式WaveAudioWaveAudio 指定指定 wave wave 音頻格式音頻格式FileDrop FileDrop 指定指定 Windows Windows 文件放置格式文件放置格式對文件進行復(fù)制時,復(fù)制到內(nèi)存中的是由多個文件對文件進行復(fù)制時,復(fù)制到內(nèi)存中的是由多個文件的路徑名構(gòu)成的字符串數(shù)組,格式為的路徑名構(gòu)成的字符串數(shù)組,格式為FileDropFileDrop /”復(fù)制復(fù)制”菜單被按下,將文件復(fù)制到剪貼板菜單被按下,將文件復(fù)制到剪貼板private void

30、cmiCopy_Click(object sender, EventArgs e) /* 列表視圖的列表視圖的SelectedItems包含了所有被選中項的集合,集合的包含了所有被選中項的集合,集合的Count屬性包含了集合中元素的個數(shù)屬性包含了集合中元素的個數(shù)*/創(chuàng)建一個字符串數(shù)組,數(shù)組的長度為列表視圖中被選中的項數(shù)創(chuàng)建一個字符串數(shù)組,數(shù)組的長度為列表視圖中被選中的項數(shù)string filslist = new stringlistView1.SelectedItems.Count;/將被選中項中保存的文件名稱保存到數(shù)組中將被選中項中保存的文件名稱保存到數(shù)組中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(); /復(fù)制到剪貼板復(fù)制到剪貼板Clipboard.SetData(DataFormats.FileDrop, filslist);lClipBordClipBord類的類的GetDataGetData方法將從系統(tǒng)剪

32、貼板中取出方法將從系統(tǒng)剪貼板中取出數(shù)據(jù),即完成數(shù)據(jù)粘貼操作,完整聲明如下:數(shù)據(jù),即完成數(shù)據(jù)粘貼操作,完整聲明如下:public static object GetData(stringpublic static object GetData(string format); format);l從剪貼板上獲取被復(fù)制文件名的代碼:從剪貼板上獲取被復(fù)制文件名的代碼: string files = string files = (string)Clipboard.GetData(DataFormats.File(string)Clipboard.GetData(DataFormats.FileDropD

33、rop););當數(shù)據(jù)格式為當數(shù)據(jù)格式為 DataFormats.FileDropDataFormats.FileDrop時,存放在時,存放在剪貼板上的數(shù)據(jù)為字符串數(shù)組,因此需對取出的數(shù)剪貼板上的數(shù)據(jù)為字符串數(shù)組,因此需對取出的數(shù)據(jù)進行類型轉(zhuǎn)換,并將結(jié)果放到字符串數(shù)組中。據(jù)進行類型轉(zhuǎn)換,并將結(jié)果放到字符串數(shù)組中?!罢迟N粘貼”菜單被點擊時執(zhí)行步驟(偽代碼)菜單被點擊時執(zhí)行步驟(偽代碼)private void cmiPast_Click(object sender, EventArgsprivate void cmiPast_Click(object sender, EventArgs e) e)

34、 1 1、從剪貼板上獲取格式為、從剪貼板上獲取格式為DataFormats.FileDropDataFormats.FileDrop的數(shù)據(jù):的數(shù)據(jù): string files = (string)Clipboard.GetData(DataFormats.FileDropstring files = (string)Clipboard.GetData(DataFormats.FileDrop); ); 2 2、取得當前目錄、取得當前目錄 ,即復(fù)制文件的目標目錄,即復(fù)制文件的目標目錄3 3、檢查要處理的是文件還是文件夾、檢查要處理的是文件還是文件夾如果為文件如果為文件 ,則:,則:檢查目標文件是

35、否存在檢查目標文件是否存在文件復(fù)制文件復(fù)制: :File.Copy(filesi,newfilepath+filNameFile.Copy(filesi,newfilepath+filName, true);, true);若不是文件,則若不是文件,則復(fù)制文件夾:復(fù)制文件夾:CopyDir(filesi, newfilepath + filNameCopyDir(filesi, newfilepath + filName) )4 4、重復(fù)第、重復(fù)第3 3步,直到步,直到files files 中的所有文件處理完畢中的所有文件處理完畢lCopyDir是一個遞歸的方法,它復(fù)制目錄及其下面是一個遞歸

36、的方法,它復(fù)制目錄及其下面的文件和子目錄,其流程可描述如下:的文件和子目錄,其流程可描述如下: private void CopyDir(string source, string destprivate void CopyDir(string source, string dest) ) if if 目標目錄不存在目標目錄不存在 創(chuàng)建目標目錄創(chuàng)建目標目錄獲取原目錄下的所有文件獲取原目錄下的所有文件循環(huán)調(diào)用循環(huán)調(diào)用File.CopyFile.Copy方法將每個文件復(fù)制到目標目錄下方法將每個文件復(fù)制到目標目錄下獲取原目錄下的所有文件夾獲取原目錄下的所有文件夾循環(huán)調(diào)用循環(huán)調(diào)用CopyDirCopy

37、Dir方法自身復(fù)制文件夾到目標目錄下方法自身復(fù)制文件夾到目標目錄下 l實現(xiàn)文件拖放的步驟:實現(xiàn)文件拖放的步驟:1 1、設(shè)置、設(shè)置ListView1 ListView1 的的AllowDragAllowDrag屬性為屬性為True True 2 2、響應(yīng)、響應(yīng)ListView1ListView1的的ItemDragItemDrag事件事件 ,并調(diào)用,并調(diào)用DoDragDropDoDragDrop方法開始拖動。方法開始拖動。3 3、響應(yīng)、響應(yīng)DragOverDragOver事件,檢查拖動數(shù)據(jù)格式,并事件,檢查拖動數(shù)據(jù)格式,并決定允許目標組件進行的操作決定允許目標組件進行的操作 。4 4、響應(yīng)、響應(yīng)

38、DragDropDragDrop事件。在這個事件中,我們應(yīng)事件。在這個事件中,我們應(yīng)該完成文件的復(fù)制或移動等操作。該完成文件的復(fù)制或移動等操作。 lItemDrag事件 :當開始拖動ListView中的某個Item時會觸發(fā)該事件 。事件參數(shù)e為ItemDragEventArgs對象,該對象的Item屬性指出了被拖動的項。lDoDragDrop方法:方法:DoDragDrop方法啟動拖放操作方法啟動拖放操作 ,該方,該方法完整聲明如下:法完整聲明如下:public DragDropEffects DoDragDrop(object data, DragDropEffects allowedEff

39、ects);datadata:拖放時要傳送的數(shù)據(jù)。:拖放時要傳送的數(shù)據(jù)。allowedEffectsallowedEffects:拖放時被允許執(zhí)行的操作。:拖放時被允許執(zhí)行的操作。DragDropEffects為枚舉類型,有以下取值:為枚舉類型,有以下取值: ScrollScroll: 即將在放置目標中開始滾動,或當前正在滾動。即將在放置目標中開始滾動,或當前正在滾動。 AllAll: 從拖動源復(fù)制、移除數(shù)據(jù),并將其滾動到放置目標中。從拖動源復(fù)制、移除數(shù)據(jù),并將其滾動到放置目標中。 NoneNone:放置目標不接受該數(shù)據(jù)。:放置目標不接受該數(shù)據(jù)。 CopyCopy: 將數(shù)據(jù)復(fù)制到放置目標。將數(shù)

40、據(jù)復(fù)制到放置目標。 MoveMove:將拖動源的數(shù)據(jù)移動到放置目標。:將拖動源的數(shù)據(jù)移動到放置目標。 LinkLink: 將拖動源中的數(shù)據(jù)鏈接到放置目標將拖動源中的數(shù)據(jù)鏈接到放置目標 lDataObject類:類:實現(xiàn)基數(shù)據(jù)傳輸機制實現(xiàn)基數(shù)據(jù)傳輸機制。主要。主要用于數(shù)據(jù)的復(fù)制粘貼和拖放用于數(shù)據(jù)的復(fù)制粘貼和拖放 操作。主要成員操作。主要成員有:有: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事件代碼:事件代碼:/拖放開始,設(shè)置拖放的文件名以及格式拖放開始,設(shè)置拖放的文件名以及格式private void listView1_ItemDrag(object sender, ItemDragEventArgs e)DataObject data = new DataObject();/獲取所有被選中項代表的文件名,并存放到字符串數(shù)組獲取所有被選中項

42、代表的文件名,并存放到字符串數(shù)組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事件:事件:檢查拖動數(shù)據(jù)格式,并決定允許目標組件進行的操作。檢查拖動數(shù)據(jù)格式,并決定允許目標組件進行的操作。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, 拖放操作為復(fù)制拖放操作為復(fù)制 e.Effect = System.Windows.Forms.DragDropEffects.Copye.Effect = System.Windows.Forms.DragDropEffects.Copy; ; elseelse/拖放操作為移動拖放操作為移動 e.Effect = System.Windows.Forms.DragD

45、ropEffects.Move; lDragDrop事件:事件:在拖放過程中用戶松開鼠標時觸發(fā)??梢栽谶@個事件中,處理最終要完在拖放過程中用戶松開鼠標時觸發(fā)??梢栽谶@個事件中,處理最終要完成的操作。成的操作。 /拖放鼠標松開后,執(zhí)行文件的復(fù)制或移動操作拖放鼠標松開后,執(zhí)行文件的復(fù)制或移動操作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里面的文件復(fù)制到指定位置,代碼省略里面的文件復(fù)制到指定位置,代碼省略 / /如果是移動如果是移動, , 刪除原始文件刪除原始文件if(e.Effect = System.Windows.Forms.DragDropEffects.Moveif(e.Effect = System.Windows.Forms.DragDropEffects.Move) ) / / 代碼省略代碼省略

47、 lFileSystemWatcher的主要屬性:的主要屬性:FilterFilter屬性。屬性。FilterFilter屬性主要用于對被監(jiān)聽的文件進行屬性主要用于對被監(jiān)聽的文件進行過濾,即告訴過濾,即告訴FileSystemWatcherFileSystemWatcher監(jiān)視哪些類型的文件。監(jiān)視哪些類型的文件。例如,要監(jiān)視例如,要監(jiān)視C C盤根目錄下的盤根目錄下的TXTTXT文件,則可將文件,則可將FilterFilter屬屬性設(shè)置為性設(shè)置為 “ “C:C:* *.TXT”.TXT”。PathPath屬性。獲取或設(shè)置要監(jiān)控的目錄路徑。屬性。獲取或設(shè)置要監(jiān)控的目錄路徑。IncludeSubdi

48、rectoriesIncludeSubdirectories屬性。屬性。 表示是否監(jiān)視表示是否監(jiān)視PathPath下的下的子目錄。子目錄。NotifyFilterNotifyFilter屬性屬性 NotifyFilterNotifyFilter指定了哪些變化會產(chǎn)指定了哪些變化會產(chǎn)生生CheagedCheaged事件,比如文件名變化,文件長度變化等。事件,比如文件名變化,文件長度變化等。該屬性是一個該屬性是一個NotifyFiltersNotifyFilters枚舉類型。枚舉類型。lFileSystemWatcher 的主要事件的主要事件 :ChangedChanged事件事件 被監(jiān)視目錄或文件

49、的大小、系統(tǒng)屬性、被監(jiān)視目錄或文件的大小、系統(tǒng)屬性、時間、安全設(shè)置等發(fā)生變化時觸發(fā),當然,這還要取決時間、安全設(shè)置等發(fā)生變化時觸發(fā),當然,這還要取決于于于于NotifyFilterNotifyFilter屬性的設(shè)置。屬性的設(shè)置。CreatedCreated事件事件 當有新文件產(chǎn)生時觸發(fā),例如我們粘貼一當有新文件產(chǎn)生時觸發(fā),例如我們粘貼一個文件時,或保存一個新文件時,目標目錄就會觸發(fā)個文件時,或保存一個新文件時,目標目錄就會觸發(fā)CreatedCreated事件。事件。DelatedDelated事件事件 當文件被刪除時觸發(fā)。當文件被刪除時觸發(fā)。RanamedRanamed事件事件 當文件或目錄名

50、稱發(fā)生變化時觸發(fā)。事件當文件或目錄名稱發(fā)生變化時觸發(fā)。事件的參數(shù)中會提供原始路徑名,文件名和更改后的路徑名的參數(shù)中會提供原始路徑名,文件名和更改后的路徑名和文件名。和文件名。當監(jiān)視到文件變化:當監(jiān)視到文件變化:private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e) /循環(huán)查找循環(huán)查找ListView中與被改變文件或文件夾相對應(yīng)的項中與被改變文件或文件夾相對應(yīng)的項 foreach (ListViewItem li in this.listView1.Items) if (li.Tag.ToStri

51、ng() = e.FullPath) /更改列表項相應(yīng)屬性更改列表項相應(yīng)屬性 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實例用于讀寫文件中的數(shù)據(jù)。它把實例用于讀寫文件中的數(shù)據(jù)。它把文件看作字節(jié)流,而不

53、關(guān)心文件的結(jié)構(gòu)。要文件看作字節(jié)流,而不關(guān)心文件的結(jié)構(gòu)。要構(gòu)造構(gòu)造FileStream實例,需要以下實例,需要以下4個信息:個信息:1 1、要訪問的文件、要訪問的文件2 2、文件打開的模式、文件打開的模式 3 3、文件的訪問方式、文件的訪問方式4 4、共享方式、共享方式l文件打開的模式文件打開的模式 枚舉枚舉 FileMode的成員用來描述文件打開模式:的成員用來描述文件打開模式:CreateNewCreateNew:指定操作系統(tǒng)應(yīng)創(chuàng)建新文件。如果文件已存:指定操作系統(tǒng)應(yīng)創(chuàng)建新文件。如果文件已存在,則將引發(fā)異常。在,則將引發(fā)異常。CreateCreate:指定操作系統(tǒng)應(yīng)創(chuàng)建新文件。如果文件已存在

54、,:指定操作系統(tǒng)應(yīng)創(chuàng)建新文件。如果文件已存在,它將被改寫它將被改寫OpenOpen指定操作系統(tǒng)應(yīng)打開現(xiàn)有文件。指定操作系統(tǒng)應(yīng)打開現(xiàn)有文件。OpenOrCreateOpenOrCreate:指定操作系統(tǒng)應(yīng)打開文件(如果文件存:指定操作系統(tǒng)應(yīng)打開文件(如果文件存在);否則,應(yīng)創(chuàng)建新文件。在);否則,應(yīng)創(chuàng)建新文件。TruncateTruncate:指定操作系統(tǒng)應(yīng)打開現(xiàn)有文件。文件一旦打:指定操作系統(tǒng)應(yīng)打開現(xiàn)有文件。文件一旦打開,就將被截斷為零字節(jié)大小。開,就將被截斷為零字節(jié)大小。AppendAppend:打開現(xiàn)有文件并查找到文件尾,或創(chuàng)建新文件。:打開現(xiàn)有文件并查找到文件尾,或創(chuàng)建新文件。l文件的訪

55、問方式文件的訪問方式訪問方式可以用訪問方式可以用FileAccess枚舉來表示。枚舉來表示。FileAccess包含三個枚舉值:包含三個枚舉值:ReadRead:只讀:只讀WriteWrite:只寫:只寫ReadWriteReadWrite:讀寫:讀寫l共享方式共享方式指定文件是獨占訪問文件,還是允許其他流同時訪指定文件是獨占訪問文件,還是允許其他流同時訪問文件。共享方式可以用問文件。共享方式可以用FileShare枚舉來表示枚舉來表示 :NoneNone:謝絕共享當前文件。:謝絕共享當前文件。ReadRead允許隨后打開文件讀取。允許隨后打開文件讀取。WriteWrite允許隨后打開文件寫入

56、。允許隨后打開文件寫入。ReadWriteReadWrite允許隨后打開文件讀取或?qū)懭?。允許隨后打開文件讀取或?qū)懭搿eleteDelete允許隨后刪除文件。允許隨后刪除文件。InheritableInheritable使文件句柄可由子進程繼承使文件句柄可由子進程繼承l(wèi)創(chuàng)建創(chuàng)建FileStream / / 創(chuàng)建新文件。未指定文件訪問方式,則該文件是可讀寫創(chuàng)建新文件。未指定文件訪問方式,則該文件是可讀寫的的FileStream fs = new FileStream(C:Sample.txt, FileStream fs = new FileStream(C:Sample.txt, FileMo

57、de.CreateFileMode.Create); ); / / 創(chuàng)建新文件,該文件只寫創(chuàng)建新文件,該文件只寫 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方法也可以創(chuàng)建文件流。方法也可以創(chuàng)建文件流。FileInfo.OpenReadFileInfo.OpenRead():():提供的流只能讀取現(xiàn)有的文件,提供的流只能讀取現(xiàn)有的文件,F(xiàn)ileInfo ().Open

59、WriteFileInfo ().OpenWrite():():可以進行讀寫訪問??梢赃M行讀寫訪問。FileInfo.OpenFileInfo.Open():():允許顯式指定模式、訪問方式和文件允許顯式指定模式、訪問方式和文件共享參數(shù)。共享參數(shù)。l例如:例如:FileInfo fi = new FileInfo(C:Sample.txtFileInfo fi = new FileInfo(C:Sample.txt); ); /創(chuàng)建創(chuàng)建FileInfoFileInfo實例實例FileStream fs = fi.OpenReadFileStream fs = fi.OpenRead(); ()

60、; /OpenRead/OpenRead方法創(chuàng)建方法創(chuàng)建一個只讀文件流一個只讀文件流l數(shù)據(jù)讀取與寫入數(shù)據(jù)讀取與寫入可以使用可以使用FileStream的的Read、ReadByte來讀取數(shù)據(jù)來讀取數(shù)據(jù) ,WriteByte 和和 Write方法方法 向文件寫入數(shù)據(jù),使用向文件寫入數(shù)據(jù),使用Close方法關(guān)閉文件流。例:方法關(guān)閉文件流。例: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論