1. 程式人生 > >基於SFTP的文件拷貝軟件(二)

基於SFTP的文件拷貝軟件(二)

net 技術 https 正則 拷貝 ubun 基本 本體 top

上次在使用Renci.SshNet組件時,每次調用Connect()方法,都回拋出個異常,aborted by software on host machine之類的。網上搜了很久,沒有說清楚的,有的說防火墻擋住了,也有說主機加密算法不支持等。後來為了盡快實現功能,找了個收費組件ComponentPro,試用1個月。收費的就是6,沒報錯。

目前軟件基本功能實現了,需要考慮長期使用的問題,所以又研究了一番。用SshNet組件連接我的阿裏雲服務器就沒報錯,連接我的VMWare Ubuntu就報錯。一度懷疑人生。最後在GitHub上找到了開源項目本體,down下來之後引用居然沒有之前的錯誤了,我也是醉了。附上SshNet本體地址:https://github.com/sshnet/SSH.NET

那麽問題已經消除,但是SshNet組件的下載,尤其是遍歷目錄中所有文件的下載,做的不是很方便,需要自己寫代碼。可以參考這裏,https://benohead.com/downloading-files-directories-via-sftp-using-ssh-net/

為了報告下載處理結果,主要是處理的文件夾和文件數量,又寫了個類:

 1 public class ProcessedData
 2     {
 3         private ArrayList processedDirList;
 4         private ArrayList processedFileList;
5 //private int processedDirCount; 6 //private int processedFileCount; 7 8 public ProcessedData() { 9 processedDirList = new ArrayList(); 10 processedFileList = new ArrayList(); 11 } 12 13 public ArrayList GetProcessedDirList() {
14 return this.processedDirList; 15 } 16 17 public void AddToProcessedDirList(string dir) { 18 this.processedDirList.Add(dir); 19 } 20 21 public void AddToProcessedFileList(string file) { 22 this.processedFileList.Add(file); 23 } 24 25 public ArrayList GetProcessedFileList() { 26 return this.processedFileList; 27 } 28 29 public int ProcessedDirCount { get { return processedDirList.Count; } } 30 31 public int ProcessedFileCount { get { return processedFileList.Count; } } 32 }

對於目標服務器上的目錄和文件,某人說需要一個篩選,要不然可能要從幾百個文件裏面找,要瞎了,所以加了個Filter。本來考慮練習下正則,後來一想,好像並不需要,用String.Contains()方法就行了。目前是這個樣子了:

技術分享

輸入字符後:

技術分享

不要問為什麽右邊有那麽大空白,因為以後還可能加拖拽拷貝功能,右邊也可能做個LargeIcon的目錄,所以先留著。

這個軟件大致如此了,目前打算看看WPF,做一個服務器狀態監控和記錄查詢的較為復雜的軟件。

基於SFTP的文件拷貝軟件(二)