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