免费论文查重: 大雅 万方 维普 turnitin paperpass

探讨维护方便业务维护打造专用FTP工具

最后更新时间:2024-02-15 作者:用户投稿原创标记本站原创 点赞:9188 浏览:34821
论文导读:
摘要: 介绍了使用Windows系统级DLL对FTP调用的功能,采用C#编程实现了一个专用的FTP工具,用于完成业务系统的上传、更新、同步等功能,并具有提供业务中FTP对比的特色功能。
关键词: FTP; 更新; 同步; 比对
1006-8228(2012)10-07-05
引言
在业务系统中,FTP对于软件的发布、内部工具的更新等起着极为重要的作用。本文介绍如何使用C#编程实现一个专用的FTP工具,用于完成业务系统的上传、更新、同步等功能,并具有提供业务中FTP对比的特色功能。
1 实现目标与思路

1.1 实现目标

常用的FTP工具大多基于交互摘自:毕业论文结论怎么写www.7ctime.com
界面,为了工具使用的方便性,采用命令行的方式来实现对应的功能更有价值。因此,我们要达成以下目的:
⑴ 用命令行完成一个目录的上传下载(非常适用于更新,能够双击或者是一个快捷键就能完成FTP的同步);
⑵ FTP是否传输正确,通过命令行完成比对(提供快速比对和完全比对),它实际上等于全部下载后(在内存)比较;也可进行快速比对,每个文件首先判断大小是否相同,如果大小相同,则只取指定长度的内容作比较,起初步判断作用。
因此,对工具的使用我们定义成以下的格式:
⑴ Myftp -up d:\sj FTP目录:完成 d:\sj上传到FTP目录;
⑵ Myftp -down FTP目录d:\sj:完成从FTP目录下传到d:\sj目录;
⑶ Myftp -c d:\sj FTP目录:确认本地目录d:\sj是否都已经正确上传至FTP;
⑷ Myftp -c -q5120 d:\sj FTP目录:功能与⑶相同,但是-q的选项用于快速比较,-q后面表示比较的字节数,如果文件长度相同,则读取相应的字节数与本地文件进行比较,判断其是否相同,从而完成一定程度上的快速比较。

1.2 实现的基本思路

为了使工具具有方便性,因此要实现:
⑴ 根据传入的命令行参数解析对应功能;
⑵ 针对不同目标,完成对应功能处理。

1.3 实现难点

为了实现相应的功能,仔细分析了FTP的特点,我们所面临的几个基本问题是:
⑴ FTP文件的上下传输处理
在上下传输处理中,使用系统的API方式处理FTP的方法,需要集中的一个namespace中来处理。
⑵ FTP目录单进程非递归遍历的实现方法
与FTP交互是一个单线程的过程,但是FTP目录和本地文件目录结果类似,它是一个树型结构,要处理它的单线程又无法使用递归实现就成了问题。在程序中我们使用了数组来实现它的递归效果;并且在每次处理时,实现只处理目录的当前层,勿需同时在多个目录间来回折腾。
⑶ 虚拟动态数组
由于使用的目录和文件数的总个数并不确定,因此在程序中我们要实现数组的动态扩展功能,其实这只要使用C#中的list类型就可以实现,这样,容器最终可以保留下来所有的子目录和文件列表。
2 具体实现
根据功能划分,我们的主流程是命令行解析和对应功能的处理。下面我们按命令行解析和具体每一项功能的处理来进行具体分析和说明,针对主程序和各功能的实现进行描述。

2.1 命令行的解析处理

在C#的主程序处理中和C非常类似,对于传入的参数在main主程序中(program.cs):
我们针对命令行中不同的参数进行分支处理,转向了具体的功能实现,分别有上传、下载、对比,在对比功能中有辅助参数,就是对比时选择长度的功能处理。通过分支处理后,程序就显得条理清晰。
接下来描述如何实现FTP的上传、下载与对比功能。

2.2 FTP处理

对于FTP的子功能处理,我们在namespace MyProFTP中,封装了调用系统wininet.dll时所使用到的以下数据:
⑴ 结构数据:FILETIME、WIN32_FIND_DATA、Itemftp;
⑵ 相关函数调用的类FtpDll。
对于具体的FTP处理使用以下的处理流程:
⑴ 首先连接FTP;
⑵ 取得FTP上的文件目录清单;
⑶ 下载时将FTP上的文件同步到本地目录;
⑷ 如果是文件比对,则和下载相似,只要将FTP上文件内容读取到内容和本地文件内容进行比较(二进制流的比较);
⑸ 如果是快速比较,则从FTP上读取的信息只要是用户指定的长度即可。
有关FTP具体功能的处理,定义了namespae myftp,里面有FTP上下传与对比的处理方法。

2.1 从FTP下载

功能使用方法说明:
在整个下载过程中:
⑴ 通过MyFtp.fun_Connect连接指定的FTP信息:在fun_Connect中完成对FTP命令行参数中指定的FTP进行连接,通过InternetOpen来初始化连接,并使用InternetConnect来完成使用指定用户进行建立链接。
⑵ MyFtp.fun_FtpDirs完成了对ftp目录及子目录的遍历:实际上在类ftpdll的私有函数private int fun_FtpDirs(string as_dir, Boolean ab_Build)中,把当前目录下的目录名与文件名加入到列表中。因此使用类型List来作为动态的文件列表,保留了文件名、FTP目录、全路径文件名和是否目录四个属性,在每一次调用了函数后,列表就会自动变化,这样我们就通过循环的方式完成了对递归方式的实现,这是对于FTP无法同时访问多个目录或者是需要不停地切换当前目录的一种好的变通处理方法,因为不停切换当前目录的开销更大更麻烦。针对要取得的所有文件,依次下载在FTP上的所有文件,使用MyFtp.fun_downfile来完成:此功能只是对指定文件进行下载。
由于工具通过系统级的wininet.dll来对FTP进行处理,因此功能上还具有非常强的兼容性的。为保证文件的正确性,文件传输时使用BINARY即流格式。

2.2 上传至FTP

功能使用方法说明:
主要是两个主流程:
⑴ 取得本地的所有文件与文论文导读:ows系统级DLL对FTP调用的功能,它不仅可以完成用户对FTP的更新和下载功能,而且还可以进行FTP的比对和快速比对,使FTP的维护变得更为简单易用。这样的工具使实际业务操作变得更方便。当然,如果想在此基础上扩展其他功能仍是可行的,但就目前所提供的功能在实际使用中已是极大地方便了维护工作,具有较大的推广价值。参考
件夹的清单,通过函数fun_locfiles来完成:
//搜索当前目录所有文件
我们也使用了循环方式来完成递归对树型结构的目录及文件信息的获取。
⑵ 每次只要处理单个文件的上传:
如果是目录,则判断FTP上目录是否存在,如果不存在,则只需建立相应的目录即可。
由此可见,对于单文件上传非常简单,只要使用dll中对应的函数就可以完成。
对于文件的上传和下载,我们在功能上都已经完成了,相比之下,实现比对功能并不是复杂的问题,但其过程会复杂一些。

2.3 文件比对

文件比对其实整合了文件下载和本地文件读取的功能,它要比较相应的文件在FTP是否正确上传,所以需检测FTP上的文件是否和本地相同,而对本地删除的文件并不作处理。命令的用法如下:
实际使用效果如图3所示。
图3文件比对实际使用效果图
在实现时,连接FTP后取FTP上对应的目录,循环也以本地为主。本地与FTP可能存在差异,我们取FTP对应目录下的文件与目录信息。
⑴ 文件或目录在FTP上不存在,可以利用ftpdll.fun_findftp函数在ftpfiles中直接找出。
⑵ 如果发现目录不存在,则自动从locfiles中剔除了同一目录及子目录下的所有文件及目录(不需要再作比较),只需要告知目录不存在即可。
⑶ 当文件存在时,打开FTP文件句柄取得长度后与本地文件进行比较,若发现长度不同,则确定文件是不同的。
⑷ 如果长度相同,此时就可以根据传入参数来决定是整个文件与本地文件进行比较还是读取限定长度来进行比较。
在函数fun_FtpCompare中完成本地目录和ftp目录之间的文件比较,判别是否正确上传,编码如下:
结合文件下载和上传,使用MyFtp.fun_FtpDirs取得了FTP上的文件列表,然后依次比较文件夹和文件是否存在,及相应的文件是否相同。
考虑到有的文件过大,因此为检测提供了抽样比较的方法,就是可以读取一个大文件的指定长度来进行快速检测。它的命令行是:
该命令行表示对文件最多只抽取128000字节进行检测,这样,当大文件很多时,就不需要从ftp上读取文件的全部内容来进行比较源于:论文 格式www.7ctime.com
,可以选择快速比较,虽然快速比较的结果不一定完全正确,但是有时可以进行临时性地快速比较,还是很有价值的。
在文件比较函数fun_Compare中,以下我们提供了全文件的比较和抽取部分长度的比较方法(//2010-01-25比对相应的文件时用到的四个参数是:本地文件,是否目录,本地路径,提示内容)。
在文件比对时,若长度不同或者是文件不存在,可以即时返回,而长度相同时就需要读取内容进行比较;当有限定长度时,只比对指定长度(大于文件长度时,只取文件长度)。
3 结束语
本文介绍了使用Windows系统级DLL对FTP调用的功能,它不仅可以完成用户对FTP的更新和下载功能,而且还可以进行FTP的比对和快速比对,使FTP的维护变得更为简单易用。这样的工具使实际业务操作变得更方便。
当然,如果想在此基础上扩展其他功能仍是可行的,但就目前所提供的功能在实际使用中已是极大地方便了维护工作,具有较大的推广价值。
参考文献:
冀志刚,王祥.用JA语言实现FTP客户端[J].唐山师范学院学报,200

6.28(5):81-82

李斌.FTP文件搜索引擎的实现

(二)[J].电脑编程技巧与维护,2012.9:63

[3] 蔡永.FTP服务器技术研究及实现[D].电子科技大学硕士学位论文,2005.
[4] (美)派克(Pike,M.A.),(美)埃斯塔布鲁克(Estabrook,N.)著, 肖绍良,冯雷译.Internet FTP用户使用指南[M].科学出版社,1996年.
[5] 数位文化编著.FTP总司令[M].北京大学出版社,2000.