




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用windows服務(wù)實(shí)現(xiàn)文件夾同步的技術(shù)研究1 弓 i 言(introduction)在很多場(chǎng)合,用戶需要在兩個(gè)文件夾之間維持同步的工作(比如更 新web文件),或基于安全的原因備份某個(gè)文件夾中的內(nèi)容到其他文件 夾等。一般的做法是使用windows資源管理器手工實(shí)現(xiàn)文件夾的同步, 但是人們時(shí)常忘記這一工作。要實(shí)現(xiàn)兩個(gè)文件夾同步,必須要有一個(gè)監(jiān)控工具時(shí)刻監(jiān)測(cè)這兩個(gè)文 件夾,并比較它們的不同之處。當(dāng)兩個(gè)文件夾其中一個(gè)發(fā)生變化,比如 對(duì)某個(gè)文件進(jìn)行修改后,同步工具能完成實(shí)時(shí)同步。事實(shí)上這種工具目 前的需求量很大,很多文件夾需要與多個(gè)目標(biāo)位置保持同步,如果通過(guò) 手工實(shí)現(xiàn)同步,其弊端主要包括工作量大,
2、容易出錯(cuò)等。本文主要研究的是一個(gè)功能強(qiáng)大的文件夾同步服務(wù)程序,用戶可以 指定耍同步的一個(gè)或多個(gè)文件夾,指定同步的時(shí)間,程序在一個(gè) windows服務(wù)后臺(tái)進(jìn)行檢測(cè),將文件夾從一個(gè)源位置同步到目標(biāo)位置。2 文件夾同步功能概述(summary of folder synchronization)文件夾同步功能的技術(shù)提供了一個(gè)同步服務(wù)配置工具,這是一個(gè) windows forms項(xiàng)目,實(shí)現(xiàn)對(duì)服務(wù)的配置,配置結(jié)果保存為xml文件 格式。同時(shí)為了調(diào)試windows服務(wù),程序?qū)崿F(xiàn)了一個(gè)服務(wù)控制臺(tái)工具。調(diào)試一個(gè)windows服務(wù)非常麻煩,這個(gè)控制臺(tái)程序使程序員可以調(diào)試 包含在windows服務(wù)中的核心代碼的實(shí)
3、現(xiàn),不用去頻繁地安裝卸載服 務(wù)。這個(gè)控制臺(tái)程序還可以與文件服務(wù)配置程序進(jìn)行通信。使用wcf 命令管道在兩個(gè)進(jìn)程z間進(jìn)行通信1。該系統(tǒng)組成結(jié)構(gòu)如圖1所示。圖丨丈件同步工具的系扯俎成結(jié)構(gòu)fig.l system aiuirositioii structure of file syirliragtion tool3 文件夾同步主要功能(main function of folder synchronization) 文件夾同步的主要功能通過(guò)一個(gè)類庫(kù)項(xiàng)目synchrolib實(shí)現(xiàn),便于 多次重用。該項(xiàng)目中的對(duì)象包括同步項(xiàng)集合對(duì)象、后臺(tái)同步線程等。3.1實(shí)現(xiàn)文件夾同步項(xiàng)集合對(duì)象syncitemcollec
4、tion集合實(shí)際上是一個(gè)泛型的listsyncltem對(duì) 象。但是syncitemcollection需要具有從xml元素中獲取同步對(duì)象的 能力,以及允許用戶開始所有同步對(duì)象的更新工作,因此從 listvsyncitem派生,也可以實(shí)現(xiàn)一個(gè)雷,在內(nèi)部包含一個(gè)泛型的 listsyncltem 集合來(lái)處理多個(gè)同步對(duì)象2。syncitemcollection對(duì)象有一個(gè)xeiement類型的屬性,該屬性將 根據(jù)在構(gòu)造函數(shù)中傳入xml元素來(lái)解析出多個(gè)syncitem對(duì)象并加載到 list集合中。該屬性的定義代碼如下:使用xeiement獲取或者是設(shè)置syncitem集合public xeiement x
5、eiementget 實(shí)例化一個(gè)新的xeiement對(duì)象xeiement value=new xeiement(“syncltemsj; foreach(syncltem item in this)/將同步對(duì)象屮的xml元素添加到xeiement元素集合value.add(item xeiement);return value; 返回 xeiement 對(duì)象實(shí)例setif(value!=null) 遍歷xeiement的子元素foreach(xeiement element in value.elements()/根據(jù)xml元素得到syncitem對(duì)象實(shí)例,添加到集合this.add(new
6、syncltem(element);get設(shè)置區(qū)域中,通過(guò)實(shí)例化一個(gè)元素名稱為syncitems來(lái)構(gòu)造一個(gè)xml片段。然后遍歷集合屮syncitem對(duì)象,將syncitem的xeiement 屬性返冋的xml片段加入到該xeiement的了元素集合中。在set設(shè)置 器中,通過(guò)遍歷xeiement的子元素集合來(lái)實(shí)例化新的syncitem對(duì)象, 再添加到泛型集合中構(gòu)造了同步集合。3.2實(shí)現(xiàn)后臺(tái)同步線程syncfiles實(shí)現(xiàn)了同步文件的操作,該方法將根據(jù)是否能進(jìn)行同步 工作來(lái)實(shí)現(xiàn)同步,實(shí)現(xiàn)代碼如下:同步文件夾的線程委托,更新目標(biāo)文件夾屮的文件,且在完成時(shí) 觸發(fā)事件private void syncf
7、iles()if(this.canstartsync) /如果允許文件夾同步trydatetime before=datetime.now; /得到同步前的時(shí)間將源文件夾中的文件更新到目標(biāo)文件夾中this.tofileslistupdate(thissyn cfrompath,this.s yn csubfolders);datetime after=datetime.now; 更新后的時(shí)間timespan elapsed=after-before; 得到所花費(fèi)的時(shí)間int updates=this.tofileslist.updates; 得到更新的個(gè)數(shù)filelnfoevent(this,
8、new filelnfoargs(updates,elapsed); /觸發(fā)更新完成事件catch(threadabortexception ex) /如果更新觸發(fā)異常 if(ex!=null) /異常處理代碼catch(exception)throw; 重新拋出這個(gè)方法最核心的部分在于使用tofileslist的update將源文件夾 中的文件更新到目標(biāo)文件夾,更新前和更新后都記錄了當(dāng)前時(shí)間,以便 記錄下更新所花費(fèi)的時(shí)間,并且記得更新的文件個(gè)數(shù)。在更新完成后, 將調(diào)用filelnfoevent事件處理代碼3。4 文件夾同步關(guān)鍵技術(shù)(key technology of folder synch
9、ronization)4.1使用wcf開發(fā)命名管道程序進(jìn)程間通信(ipc)的應(yīng)用非常廣泛,其特點(diǎn)是消息無(wú)須跨越防火墻 和主機(jī)。ipc是一種通信的方法,源于unix操作系統(tǒng)。在windows 操作系統(tǒng)中,使用進(jìn)程間通信除了命名管道,還可以使用剪貼板、郵件 槽、tcp/ip通信、內(nèi)存映射文件等技術(shù)4。wcf本身提供了 netnamedpipebing對(duì)象,使創(chuàng)建命名管道變得 非常簡(jiǎn)單。wcf把通信都進(jìn)行了統(tǒng)一化,假如熟悉wcf開發(fā),完全 不用去學(xué)習(xí)與命名管道相關(guān)的細(xì)節(jié),由wcf實(shí)現(xiàn)管道的創(chuàng)建與通信工 作。使用netnamedpipebinding綁楚與其他類型綁是的不同之處在于 路徑的指定,例如使
10、用地址:net.pipe:/localhost/synchroservicewcf0 地址中的net.pipe對(duì)應(yīng)命名管道協(xié)議,任何使用了命名管道傳輸通道的 綁定都使用net.pipe作為地址的協(xié)議部分。localhost是地址的主機(jī)部 分,而synchroservicewcf是一個(gè)可選項(xiàng),是為了使系統(tǒng)可讀,通常 是服務(wù)名稱,命名應(yīng)該與服務(wù)內(nèi)容相關(guān),讓人更清楚服務(wù)的作用5。4.2實(shí)現(xiàn)監(jiān)控和配置項(xiàng)目配置和監(jiān)控windows forms項(xiàng)目提供了用戶界面與用戶交互。該 項(xiàng)冃提供了如下功能讓用戶配置文件同步服務(wù),以及查看由windows 服務(wù)返回的文件同步結(jié)果消息。(1) 允許添加和修改同步項(xiàng),以及
11、用于文件同步所需要的一些設(shè)置選項(xiàng),這些選項(xiàng)將被保存到xml配置文件中。(2) 允許啟動(dòng)和停止windows服務(wù),以及作為wcf服務(wù)宿主來(lái)監(jiān) 聽來(lái)自windows服務(wù)的同步結(jié)果消息。(3) 允許安裝和卸載windows服務(wù),并能檢查windows服務(wù)是否 安裝。實(shí)現(xiàn)這個(gè)項(xiàng)h使文件同步程序能夠提高使用性,也便于查看在文件同步過(guò)程中到底是成功還是失敗,能深入了解文件同步的過(guò)程6。4.2.1在主窗口中啟動(dòng)或停止服務(wù)用戶主界面的啟動(dòng)、停止服務(wù)都將調(diào)用globals靜態(tài)類中定義的相 關(guān)的方法來(lái)啟動(dòng)和停止服務(wù)。當(dāng)服務(wù)啟動(dòng)后,如果windows服務(wù)實(shí)現(xiàn) 了同步的操作,將使用命名管道發(fā)送同步消息,wcf服務(wù)受到
12、消息, 觸發(fā)form1_synchrohostevent事件處理代碼,代碼如下:void form 1 _synchrohostevent(objectsender,synchrohosteventargs e)e.date=e.date.clearseconds(); 使用擴(kuò)展方法清除日期中的秒 數(shù)string dateformat=lyyyy-mm-dd hhmrrt;/定義顯示的日期格式if(this.listboxactivity.items.count>0) /移除任何大于 24 小時(shí)的記 錄bool deleted=false;do循環(huán)移除日期的最后一條deleted=fal
13、se;獲取listbox中最后一個(gè)item的索引號(hào)int lastltem=thisistboxactivityterns.count1;得到最后一個(gè)listviewltem的文本string oldestmsg=thisistboxactivitytemslastltem.tostring();如果字符串不為空或null且字符串的長(zhǎng)度大于16個(gè)if(!string.lsnullorempty(oldestmsg)&&oldestmsg .length>16)0-desimsgh0-desimsgsubsmng(p16)fehlkwj16->兇三 daotime d
14、aqiime if(da(dtime.tryparse(o-desimsgoui daohme)亠timespan e-apsedhda(diimeedacd©rt 巨m ifgapsed.daysvo) w 笛淞>hhhip>知適巨習(xí) 亠ihis-isiboxa2.i<.iy-0msremoveai(-asi-qm=d e - eiedhir u e 二/蹦冷口臺(tái)粥 e-se-二審淫h啟敲郵越可0闘蘋舟 ihis-isiboxacimiy-omsremove>(-ash0md e-e(dd"r u 22陽(yáng)2塗w一)whi-e(de-ecdd)八 /
15、眶 de_eied 窮苗涉 fa-se 迢is圧喩孕 一帚匚s5ox耳舸歿毬>潼耳>4講血如siring msgusmng.forma 三(0)丄二 jedaqtos=ing(da(dformau-emessage) ihis-isaoxacimiy-0ms-nserl(pmsg=在代碼中,首先使用擴(kuò)展方法clearseconds清除日期時(shí)間中的秒 數(shù),再判斷l(xiāng)istbox中是否存在記錄。如果存在,則在一個(gè)循環(huán)do中 進(jìn)行刪除操作。在循環(huán)體中,總檢查listbox中的最后一行,得到最后 一行顯示的文本,先獲取表示日期時(shí)間的前16個(gè)字符串,使用 datetime.tryparse將其
16、轉(zhuǎn)換為fl期格式。然后判斷該時(shí)間與從服務(wù)器 端當(dāng)前返冋的時(shí)間是否相差多過(guò)一天,如果大于0,表示超過(guò)24小時(shí), 則進(jìn)行項(xiàng)的移除;當(dāng)delete標(biāo)志為false時(shí),表示沒有大于1天的口志, 則退出循環(huán)。最后將從wcf服務(wù)屮傳回的小時(shí)插入到listbox中的頂 部,即第0行7。4.2.2使用同步項(xiàng)更新用戶界面formaddsyncitem類重載了默認(rèn)的構(gòu)造函數(shù),用來(lái)接收一個(gè) list<string>集合和一個(gè)要編輯的syncitem。一旦syncitem被傳入,會(huì) 使用同步對(duì)象屮的屬性來(lái)更新用戶界面。formaddsyncitem類的構(gòu)造 函數(shù)代碼如下:public formaddsyn
17、cltem(syncltem item,list<string> names)m_existingnames=names; 得到同步項(xiàng)名稱集合m_adding=(item=null); 判斷是否為添加還是編輯狀態(tài) this.syncltem=item; 賦同步項(xiàng)對(duì)象實(shí)例initializecompone nt();如果是添加一個(gè)新的項(xiàng),需要提供一個(gè)唯一的名稱以免用戶輸入 重復(fù)的同步項(xiàng)名稱if(m_adding) /如果為添加string tempname=4t文件同步項(xiàng)0”;int count=0; 初始化計(jì)數(shù)器do 通過(guò)循環(huán)得到新的名稱增量this.textboxname.tex
18、t=string.format(tempname,4-+count);while(namelsduplicate(); 判斷名稱是否重復(fù)else使用指定的同步項(xiàng)更新用戶界面this.textboxname.text=item.name; 同步項(xiàng)名稱this.textboxsyncfrom.text=item.syncfrompath; 源路徑 this.textboxsyncto.text=item.synctopath; 目標(biāo)路徑 this.textboxbackupfolder.text=item.backuppath; 備份路徑 this.checkboxbackupbeforesync
19、.checked=item.backupbeforesync; 是否備份this.checkboxenable.checked=item.enabled; 是否允許 this.checkboxincludesubs.checked=item.syncsubfolders; 是否包含子文件夾this.checkboxremoveaftersync.checked=ite m. deleteaftersync;同步后是否刪除之所以傳入同步項(xiàng)名稱集合,是因?yàn)槌绦蛞苊獬霈F(xiàn)具有相同名稱 的同步項(xiàng)。如果是新增狀態(tài),程序通過(guò)循環(huán)的方式自動(dòng)提供了一個(gè)同步 項(xiàng)名稱。如果不為新增狀態(tài),程序?qū)膫魅氲膕yncit
20、em中更新用戶界 面,以便用戶可以編輯現(xiàn)有的同步項(xiàng)8。5 結(jié)論(conclusion)使用system.10命名空間中的文件操作類能實(shí)現(xiàn)在兩個(gè)或多個(gè)文 件夾z前自動(dòng)復(fù)制備份,實(shí)現(xiàn)同步工作,并使用oop方法設(shè)計(jì)文件同 步相關(guān)的類,將文件同步的核心功能實(shí)現(xiàn)在windows服務(wù)中,為了在 windows服務(wù)與監(jiān)控配置程序之間通信,使用wcf命名管道實(shí)現(xiàn)了進(jìn) 程間的通信。服務(wù)類應(yīng)用程序的開發(fā)在實(shí)現(xiàn)文件夾同步技術(shù)屮發(fā)揮了很大的優(yōu) 勢(shì),同時(shí)能更深入地理解windows服務(wù)的使用,其相關(guān)技術(shù)有待進(jìn)一 步研究。參考文獻(xiàn)(references)1 qingfeng jing,et al.pseudo-noise preamble based joint frame and frequency synchronization algorithm in ofdm communication systemsj.journal of systems engineering andelectronics,2014,(01 ):251 -25
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)用地利用現(xiàn)狀分析
- 室內(nèi)墻面防水施工方案
- 2024年三季度報(bào)湖南地區(qū)A股長(zhǎng)期負(fù)債比率排名前十大上市公司
- 2024年三季度報(bào)湖南地區(qū)A股利息支付倍數(shù)排名前十大上市公司
- 堆土施工方案
- 鋼橋梁施工方案
- 2025年餐廳經(jīng)理考試試題及答案
- 2025年專業(yè)培訓(xùn) 測(cè)試題及答案
- 6年級(jí)上冊(cè)數(shù)學(xué)第5單元
- 2025年消防入門考試題及答案
- GB/T 4154-1993氧化鑭
- 水泥混凝土路面試驗(yàn)檢測(cè)的要點(diǎn)
- 運(yùn)輸供應(yīng)商年度評(píng)價(jià)表
- 室內(nèi)消防及給排水管道安裝施工方案方案
- 無(wú)創(chuàng)呼吸機(jī)參數(shù)調(diào)節(jié)課件
- 《過(guò)零丁洋》公開課件
- 文件傳閱單范本
- 電工培養(yǎng)計(jì)劃表
- 部編版五年級(jí)道德與法治下冊(cè)課程綱要
- Q∕SY 02006-2016 PVT取樣技術(shù)規(guī)程
- 初中物理公式MicrosoftWord文檔
評(píng)論
0/150
提交評(píng)論