• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      方便業(yè)務(wù)維護(hù)打造專用FTP工具

      2012-12-31 00:00:00白亦霆徐懷平
      計(jì)算機(jī)時(shí)代 2012年10期

      摘要: 介紹了使用Windows系統(tǒng)級DLL對FTP調(diào)用的功能,采用C#編程實(shí)現(xiàn)了一個(gè)專用的FTP工具,用于完成業(yè)務(wù)系統(tǒng)的上傳、更新、同步等功能,并具有提供業(yè)務(wù)中FTP對比的特色功能。

      關(guān)鍵詞: FTP; 更新; 同步; 比對

      中圖分類號:TP311.1 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2012)10-07-05

      引言

      在業(yè)務(wù)系統(tǒng)中,F(xiàn)TP對于軟件的發(fā)布、內(nèi)部工具的更新等起著極為重要的作用。本文介紹如何使用C#編程實(shí)現(xiàn)一個(gè)專用的FTP工具,用于完成業(yè)務(wù)系統(tǒng)的上傳、更新、同步等功能,并具有提供業(yè)務(wù)中FTP對比的特色功能。

      1 實(shí)現(xiàn)目標(biāo)與思路

      1.1 實(shí)現(xiàn)目標(biāo)

      常用的FTP工具大多基于交互界面,為了工具使用的方便性,采用命令行的方式來實(shí)現(xiàn)對應(yīng)的功能更有價(jià)值。因此,我們要達(dá)成以下目的:

      ⑴ 用命令行完成一個(gè)目錄的上傳下載(非常適用于更新,能夠雙擊或者是一個(gè)快捷鍵就能完成FTP的同步);

      ⑵ FTP是否傳輸正確,通過命令行完成比對(提供快速比對和完全比對),它實(shí)際上等于全部下載后(在內(nèi)存)比較;也可進(jìn)行快速比對,每個(gè)文件首先判斷大小是否相同,如果大小相同,則只取指定長度的內(nèi)容作比較,起初步判斷作用。

      因此,對工具的使用我們定義成以下的格式:

      ⑴ Myftp -up d:\\sj FTP目錄:完成 d:\\sj上傳到FTP目錄;

      ⑵ Myftp -down FTP目錄d:\\sj:完成從FTP目錄下傳到d:\\sj目錄;

      ⑶ Myftp -c d:\\sj FTP目錄:確認(rèn)本地目錄d:\\sj是否都已經(jīng)正確上傳至FTP;

      ⑷ Myftp -c -q5120 d:\\sj FTP目錄:功能與⑶相同,但是-q的選項(xiàng)用于快速比較,-q后面表示比較的字節(jié)數(shù),如果文件長度相同,則讀取相應(yīng)的字節(jié)數(shù)與本地文件進(jìn)行比較,判斷其是否相同,從而完成一定程度上的快速比較。

      1.2 實(shí)現(xiàn)的基本思路

      為了使工具具有方便性,因此要實(shí)現(xiàn):

      ⑴ 根據(jù)傳入的命令行參數(shù)解析對應(yīng)功能;

      ⑵ 針對不同目標(biāo),完成對應(yīng)功能處理。

      1.3 實(shí)現(xiàn)難點(diǎn)

      為了實(shí)現(xiàn)相應(yīng)的功能,仔細(xì)分析了FTP的特點(diǎn),我們所面臨的幾個(gè)基本問題是:

      ⑴ FTP文件的上下傳輸處理

      在上下傳輸處理中,使用系統(tǒng)的API方式處理FTP的方法,需要集中的一個(gè)namespace中來處理。

      ⑵ FTP目錄單進(jìn)程非遞歸遍歷的實(shí)現(xiàn)方法

      與FTP交互是一個(gè)單線程的過程,但是FTP目錄和本地文件目錄結(jié)果類似,它是一個(gè)樹型結(jié)構(gòu),要處理它的單線程又無法使用遞歸實(shí)現(xiàn)就成了問題。在程序中我們使用了數(shù)組來實(shí)現(xiàn)它的遞歸效果;并且在每次處理時(shí),實(shí)現(xiàn)只處理目錄的當(dāng)前層,勿需同時(shí)在多個(gè)目錄間來回折騰。

      ⑶ 虛擬動(dòng)態(tài)數(shù)組

      由于使用的目錄和文件數(shù)的總個(gè)數(shù)并不確定,因此在程序中我們要實(shí)現(xiàn)數(shù)組的動(dòng)態(tài)擴(kuò)展功能,其實(shí)這只要使用C#中的list類型就可以實(shí)現(xiàn),這樣,容器最終可以保留下來所有的子目錄和文件列表。

      2 具體實(shí)現(xiàn)

      根據(jù)功能劃分,我們的主流程是命令行解析和對應(yīng)功能的處理。下面我們按命令行解析和具體每一項(xiàng)功能的處理來進(jìn)行具體分析和說明,針對主程序和各功能的實(shí)現(xiàn)進(jìn)行描述。

      2.1 命令行的解析處理

      在C#的主程序處理中和C非常類似,對于傳入的參數(shù)在main主程序中(program.cs):

      我們針對命令行中不同的參數(shù)進(jìn)行分支處理,轉(zhuǎn)向了具體的功能實(shí)現(xiàn),分別有上傳、下載、對比,在對比功能中有輔助參數(shù),就是對比時(shí)選擇長度的功能處理。通過分支處理后,程序就顯得條理清晰。

      接下來描述如何實(shí)現(xiàn)FTP的上傳、下載與對比功能。

      2.2 FTP處理

      對于FTP的子功能處理,我們在namespace MyProFTP中,封裝了調(diào)用系統(tǒng)wininet.dll時(shí)所使用到的以下數(shù)據(jù):

      ⑴ 結(jié)構(gòu)數(shù)據(jù):FILETIME、WIN32_FIND_DATA、Itemftp;

      ⑵ 相關(guān)函數(shù)調(diào)用的類FtpDll。

      對于具體的FTP處理使用以下的處理流程:

      ⑴ 首先連接FTP;

      ⑵ 取得FTP上的文件目錄清單;

      ⑶ 下載時(shí)將FTP上的文件同步到本地目錄;

      ⑷ 如果是文件比對,則和下載相似,只要將FTP上文件內(nèi)容讀取到內(nèi)容和本地文件內(nèi)容進(jìn)行比較(二進(jìn)制流的比較);

      ⑸ 如果是快速比較,則從FTP上讀取的信息只要是用戶指定的長度即可。

      有關(guān)FTP具體功能的處理,定義了namespae myftp,里面有FTP上下傳與對比的處理方法。

      2.2.1 從FTP下載

      功能使用方法說明:

      在整個(gè)下載過程中:

      ⑴ 通過MyFtp.fun_Connect連接指定的FTP信息:在fun_Connect中完成對FTP命令行參數(shù)中指定的FTP進(jìn)行連接,通過InternetOpen來初始化連接,并使用InternetConnect來完成使用指定用戶進(jìn)行建立鏈接。

      ⑵ MyFtp.fun_FtpDirs完成了對ftp目錄及子目錄的遍歷:實(shí)際上在類ftpdll的私有函數(shù)private int fun_FtpDirs(string as_dir, Boolean ab_Build)中,把當(dāng)前目錄下的目錄名與文件名加入到列表中。因此使用類型List來作為動(dòng)態(tài)的文件列表,保留了文件名、FTP目錄、全路徑文件名和是否目錄四個(gè)屬性,在每一次調(diào)用了函數(shù)后,列表就會(huì)自動(dòng)變化,這樣我們就通過循環(huán)的方式完成了對遞歸方式的實(shí)現(xiàn),這是對于FTP無法同時(shí)訪問多個(gè)目錄或者是需要不停地切換當(dāng)前目錄的一種好的變通處理方法,因?yàn)椴煌G袚Q當(dāng)前目錄的開銷更大更麻煩。

      針對要取得的所有文件,依次下載在FTP上的所有文件,使用MyFtp.fun_downfile來完成:此功能只是對指定文件進(jìn)行下載。

      由于工具通過系統(tǒng)級的wininet.dll來對FTP進(jìn)行處理,因此功能上還具有非常強(qiáng)的兼容性的。為保證文件的正確性,文件傳輸時(shí)使用BINARY即流格式。

      2.2.2 上傳至FTP

      功能使用方法說明:

      主要是兩個(gè)主流程:

      ⑴ 取得本地的所有文件與文件夾的清單,通過函數(shù)fun_locfiles來完成:

      //搜索當(dāng)前目錄所有文件

      我們也使用了循環(huán)方式來完成遞歸對樹型結(jié)構(gòu)的目錄及文件信息的獲取。

      ⑵ 每次只要處理單個(gè)文件的上傳:

      如果是目錄,則判斷FTP上目錄是否存在,如果不存在,則只需建立相應(yīng)的目錄即可。

      由此可見,對于單文件上傳非常簡單,只要使用dll中對應(yīng)的函數(shù)就可以完成。

      對于文件的上傳和下載,我們在功能上都已經(jīng)完成了,相比之下,實(shí)現(xiàn)比對功能并不是復(fù)雜的問題,但其過程會(huì)復(fù)雜一些。

      2.2.3 文件比對

      文件比對其實(shí)整合了文件下載和本地文件讀取的功能,它要比較相應(yīng)的文件在FTP是否正確上傳,所以需檢測FTP上的文件是否和本地相同,而對本地刪除的文件并不作處理。命令的用法如下:

      實(shí)際使用效果如圖3所示。

      圖3 文件比對實(shí)際使用效果圖

      在實(shí)現(xiàn)時(shí),連接FTP后取FTP上對應(yīng)的目錄,循環(huán)也以本地為主。本地與FTP可能存在差異,我們?nèi)TP對應(yīng)目錄下的文件與目錄信息。

      ⑴ 文件或目錄在FTP上不存在,可以利用ftpdll.fun_findftp函數(shù)在ftpfiles中直接找出。

      ⑵ 如果發(fā)現(xiàn)目錄不存在,則自動(dòng)從locfiles中剔除了同一目錄及子目錄下的所有文件及目錄(不需要再作比較),只需要告知目錄不存在即可。

      ⑶ 當(dāng)文件存在時(shí),打開FTP文件句柄取得長度后與本地文件進(jìn)行比較,若發(fā)現(xiàn)長度不同,則確定文件是不同的。

      ⑷ 如果長度相同,此時(shí)就可以根據(jù)傳入?yún)?shù)來決定是整個(gè)文件與本地文件進(jìn)行比較還是讀取限定長度來進(jìn)行比較。

      在函數(shù)fun_FtpCompare中完成本地目錄和ftp目錄之間的文件比較,判別是否正確上傳,編碼如下:

      結(jié)合文件下載和上傳,使用MyFtp.fun_FtpDirs取得了FTP上的文件列表,然后依次比較文件夾和文件是否存在,及相應(yīng)的文件是否相同。

      考慮到有的文件過大,因此為檢測提供了抽樣比較的方法,就是可以讀取一個(gè)大文件的指定長度來進(jìn)行快速檢測。它的命令行是:

      該命令行表示對文件最多只抽取128000字節(jié)進(jìn)行檢測,這樣,當(dāng)大文件很多時(shí),就不需要從ftp上讀取文件的全部內(nèi)容來進(jìn)行比較,可以選擇快速比較,雖然快速比較的結(jié)果不一定完全正確,但是有時(shí)可以進(jìn)行臨時(shí)性地快速比較,還是很有價(jià)值的。

      在文件比較函數(shù)fun_Compare中,以下我們提供了全文件的比較和抽取部分長度的比較方法(//2010-01-25比對相應(yīng)的文件時(shí)用到的四個(gè)參數(shù)是:本地文件,是否目錄,本地路徑,提示內(nèi)容)。

      在文件比對時(shí),若長度不同或者是文件不存在,可以即時(shí)返回,而長度相同時(shí)就需要讀取內(nèi)容進(jìn)行比較;當(dāng)有限定長度時(shí),只比對指定長度(大于文件長度時(shí),只取文件長度)。

      3 結(jié)束語

      本文介紹了使用Windows系統(tǒng)級DLL對FTP調(diào)用的功能,它不僅可以完成用戶對FTP的更新和下載功能,而且還可以進(jìn)行FTP的比對和快速比對,使FTP的維護(hù)變得更為簡單易用。這樣的工具使實(shí)際業(yè)務(wù)操作變得更方便。

      當(dāng)然,如果想在此基礎(chǔ)上擴(kuò)展其他功能仍是可行的,但就目前所提供的功能在實(shí)際使用中已是極大地方便了維護(hù)工作,具有較大的推廣價(jià)值。

      參考文獻(xiàn):

      [1] 冀志剛,王祥.用JAVA語言實(shí)現(xiàn)FTP客戶端[J].唐山師范學(xué)院學(xué)報(bào),2006.28(5):81-82

      [2] 李斌.FTP文件搜索引擎的實(shí)現(xiàn)(二)[J].電腦編程技巧與維護(hù),2012.9:63

      [3] 蔡永.FTP服務(wù)器技術(shù)研究及實(shí)現(xiàn)[D].電子科技大學(xué)碩士學(xué)位論文,2005.

      [4] (美)派克(Pike,M.A.),(美)埃斯塔布魯克(Estabrook,N.)著, 肖紹良,馮雷譯.Internet FTP用戶使用指南[M].科學(xué)出版社,1996年.

      [5] 數(shù)位文化編著.FTP總司令[M].北京大學(xué)出版社,2000.

      河源市| 清河县| 鲜城| 迁安市| 高尔夫| 会理县| 吉水县| 太和县| 沿河| 台南市| 伊通| 姚安县| 青铜峡市| 七台河市| 独山县| 政和县| 隆化县| 武乡县| 衡山县| 腾冲县| 崇州市| 和平区| 成都市| 高邮市| 浮梁县| 安义县| 阳高县| 延寿县| 通河县| 临邑县| 额尔古纳市| 绵竹市| 安庆市| 乌拉特前旗| 始兴县| 津南区| 永德县| 教育| 常山县| 江山市| 清河县|