小編,已經快學了兩年編程了。昨天突發奇想,想統計下這些年到底寫過多少行代碼,於是做了一個這個小程序來統計代碼行數。老規矩,先上圖。
比較慚愧,寫了兩年只有2萬多行。那我們還是進入下一項吧。
界面搭建我也不說了,我就講一下思路和核心代碼,最后附上源代碼。Life_Programmer、Serch_Files。
思路:我們點擊刷新按鈕,他會彈出一個小窗口讓我們選擇要搜索的區域。這個原理在我的C#游戲進程殺手的隨筆講過了,這里就不贅述了。
關於這個搜索小窗口,我覺得適用范圍很廣,我是把它做成了一個.dll文件引入到我們這個主程序的。這個小窗口我也會附上源碼在本篇隨筆。
那我們這次主要講講和上一次不一樣的地方。
既然我們把它這個小窗口封裝起來了,那么我們就要給予它最大的靈活性。目的:讓它搜索出我們想要的東西。
那么達成這個目的,我們需要明確兩點:
1)要搜索文件的名字。(或者說要搜索的字段)
2)要搜索文件的類型。(文件名,還是后綴名)
所以為了完成這兩點,我們需要將將要搜索的字段封裝在這個小窗體里,設置一個屬性對外提供訪問接口。
1 List<string> SerchName = new List<string>(); //要查找的字段 2 public List<string> SerchName1 3 { 4 get { return SerchName; } 5 set { SerchName = value; } 6 }
1 //設置查找文件類型 2 private int i; 3 public int I 4 { 5 get { return i; } 6 set { i = value; } 7 }
將這兩個字段封裝好,在我們的主窗體內對其賦值即能提供其最大的靈活性。
那么接下來我們重點來聊聊子窗體中FinleFile類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 namespace Serch_File 8 { 9 class FindFile 10 { 11 12 public List<string> lst1 = new List<string>(); 13 public List<string> getFile(string path, string extName, int i)//創建一個List<FileInfo>類型的函數 14 { 15 getdir(path, extName, i);//傳入路徑、搜索的字段 、將要搜索的類型 16 return lst1; 17 } 18 19 private void getdir(string path, string extName, int i) 20 { 21 try 22 { 23 //獲取文件夾列表 24 string[] dirs = Directory.GetDirectories(path);
DirectoryInfo fdir = new DirectoryInfo(path); 25 FileInfo[] file = fdir.GetFiles(); 26 //當前目錄文件或目錄不為空 27 if (file.Length != 0 || dirs.Length != 0) 28 { 29 foreach (FileInfo f in file) 30 { 31 switch (i) 32 { 33 case 0: if (extName == f.Name) //根據文件名匹配上 34 { 35 lst1.Add(f.Name); 36 } break; 37 case 1: if (extName == f.Extension) //根據后綴名匹配上 38 { 39 lst1.Add(f.FullName); 40 } break; 41 } 42 } 43 foreach (string d in dirs) 44 { 45 getdir(d, extName, i);//遞歸 46 } 47 } 48 } 49 catch 50 { 51 52 } 53 } 54 55 } 56 }
大家注意在24行遍歷文件夾列表時,我們會在盤符下面遍歷到一個零時文件夾,其中索引為0的值似乎是一個亂碼,其實不然這是我們盤符下的系統隱藏文件夾。大家可以不管它。
那最后我們來談談怎么把一個窗體封裝成dll文件,供其它項目引用。
1、生成dll文件
右鍵我們的項目名稱,點擊進入屬性。
把輸出類型改為類庫,然后點擊生成解決方案。就會在本程序的Debug目錄下生成一個dll文件。
2、將dll引入目標項目
把我們生成的dll文件先復制拷貝到目標項目的debug目錄下。然后右擊引用,找到添加引用。
點擊瀏覽找到我們的dll文件。
再在我們的代碼中導入命名空間
然后就成功了。
試試:
ok,沒問題。
最后希望各位能再完善完善我們的搜索小功能。