基于SFTP的文件拷贝软件(二)

 

上次在使用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,做一个服务器状态监控和记录查询的较为复杂的软件。

 

posted @ 2017-10-03 17:24  Reaver21  阅读(721)  评论(0编辑  收藏  举报