每次啟動都需要經過漫長的時間去遍歷磁碟裡的檔案目錄
因為資料是用的字典儲存的,所以會消耗大量的記憶體空間
不能多次查詢
現在我們就針對這些問題,讓我們的小工具實用起來。
在動手之前,我們先分析一下問題。在實際開發之前,無論是接到什麼需求都要先仔細分析一下,確定好方案再動手方為開發的正道。嗯,沒毛病。因為開發過程中跟產品對線、跟客戶對線要佔整個專案的一半左右時間。好了,不廢話了。繼續:
遍歷檔案目錄的時間過長,那麼我們是不是可以用非同步併發去遍歷呢?
資料用字典儲存會消耗記憶體空間,那麼我們是不是可以用其他的方式儲存呢?
不能多次查詢,是不是可以使用迴圈,然後設定乙個退出條件?
在c#裡,非同步和併發的實現是依據執行緒、任務來實現的。在之前《c# 基礎知識系列- 12 任務和多執行緒》裡大概介紹了一下執行緒和任務,我們知道執行緒本身是沒法返回資料的,它與主線程進行資料互動的過程十分需要注意執行緒安全。而任務可以返回資料,不需要像執行緒一樣小心翼翼地與主線程進行資料互動。任務有乙個優點,它比執行緒更輕量,所以在當前環境下我們可以試試任務。
當然,執行緒也有優點,那就是執行緒的執行環境相對更封閉一點,它能完成乙個長的大型運算。
using system.threading.tasks;
先提取一組根據可列舉目錄集合建立任務組並取得結果的方法:
public static dictionary> overdirectories(ienumerabledirectories)
然後改造原有的overdirectories方法:
public static dictionary> overdirectories(directoryinfo rootdirectory)
"); var dict = new dictionary>();
ienumerablefiles = new list();
trycatch(exception e)
");//列印錯誤資訊
}foreach(var file in files)
dict[key].add(file.fullname);
}try
catch (system.exception e)
");//列印錯誤資訊
}return dict;
}
理想狀態下,我們的資料應該是儲存在資料庫的,但因為資料庫的操作是在下一系列的教程中,所以目前只能捨棄這個設想。
那麼,利用現有方式,我們可以使用檔案作為快取的方式,也就是說把資料儲存在檔案裡,在需要的時候從檔案中讀取出來。這時候就需要一組操作檔案的方法。
首先,宣告乙個靜態變數:
public static readonly string tempfile = "temp.txt";
然後編寫讀取、存放資料的方法:
public static void writelinestotemp(listlines)
public static listsearch(string file)
這時候在檔案中存放的都是路徑檔案,所以需要重新修改遍歷檔案路徑的方法,只保留路徑:
public static listoverdirectories(directoryinfo rootdirectory)
"); listfiles = new list();
try下 找到 檔案: 個");
}catch(exception e)
中\t錯誤資訊:");//列印錯誤資訊
}try
catch (system.exception e)
時發生錯誤:");
}return files;
}public static void overdirectories(ienumerabledirectories)}}
最後修改主方法,設定啟動時遍歷路徑的規則:
static void main(string args)
console.writeline("請輸入要查詢的檔名:");
var search = console.readline().trim();
}
設定使用者輸入q或q的時候退出程式,這時候就需要改造main方法了:
static void main(string args)
while(true)
console.writeline("查詢中……");
var results = search(search);
console.writeline("查詢結果:");
foreach(var r in results)
}console.writeline("程式已退出!");
}
在main 方法裡加了很多提示語句,以方便使用。
以上是第一次實戰課的所有內容。歡迎各位小夥伴們踴躍討論。這個小工具並不完善,但是隨著我們對.net core的了解和深入就會寫的得心應手了。
C 基礎 呼叫CMD的乙個小工具
由於經常要使用cmd的一些命令,比如檢視ip,ping乙個 之類的。於是就寫了乙個呼叫cmd.exe的小工具。主要就是實現這樣乙個事情 呼叫cmd.exe然後傳給它我想要執行的命令,最後獲取結果。介面 主要執行 using system.diagnostics using system.io nam...
C 基礎知識系列之 for迴圈
c 的for迴圈提供的迭代迴圈機制是在執行下一次迭代前,測試是否滿足某個條件,其語法如下 for initializer,condition,iterator statement s 其中 initializer是指在執行第一次迭代前要計算的表示式 通常把乙個區域性變數初始化為迴圈計數器 condi...
C 基礎知識梳理系列索引
摘 要 這個系列,將從山腳寫到山腰。由於鄙人知識匱乏,不敢奢望攀登山頂。c target runtime v4.0.30319 系列索引 c 基礎知識梳理系列一 clr及程式集部署 c 基礎知識梳理系列二 c 的演繹大師 型別 c 基礎知識梳理系列三 c 類成員 常量 字段 屬性 c 基礎知識梳理系...