專利名稱:一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法和系統(tǒng)。
背景技術(shù):
為實(shí)現(xiàn)對(duì)計(jì)算機(jī)上圖片的方便快捷處理,目前開(kāi)發(fā)出了很多圖像處理工具,如可??磮D、Picasa等等。可??磮D是一款簡(jiǎn)單易用的圖片瀏覽軟件,能夠提供豐富多樣的圖片瀏覽方式、批量圖片上傳等功能。Picasa是一款可以幫助用戶在計(jì)算機(jī)上立即找到、修改和共享所有圖片的軟件。用戶每次打開(kāi)Picasa時(shí),軟件都會(huì)自動(dòng)查找所有圖片(甚至是那些用戶已經(jīng)遺忘的圖片),并將查找的圖片按日期順序放在可見(jiàn)的相冊(cè)中,同時(shí)以用戶易于識(shí)別的名稱命名文件夾;用戶可以通過(guò)拖放操作來(lái)排列相冊(cè),還可以添加標(biāo)簽來(lái)創(chuàng)建新組。上述圖像處理工具的顯示界面如圖1所示,通常由文件夾樹(shù)和通鋪組成,界面的左半部分以樹(shù)狀結(jié)構(gòu)展示的所有文件夾即稱為文件夾樹(shù);界面的右半部分平鋪展示的選定文件夾(圖中為C盤(pán))及其所有子文件夾內(nèi)的圖片即稱為通鋪。當(dāng)計(jì)算機(jī)中的文件發(fā)生改變(增加、修改或刪除)時(shí),圖像處理工具的軟件內(nèi)外目錄需要實(shí)現(xiàn)同步,即文件在軟件外部(如Windows資源管理器中)發(fā)生改變(增加、修改或刪除)時(shí),軟件內(nèi)部需要及時(shí)捕獲并響應(yīng)這一改變,這種響應(yīng)在所述軟件中表現(xiàn)為文件夾樹(shù)和通鋪中的內(nèi)容的及時(shí)更新。目前,可??磮D采用輪詢機(jī)制來(lái)進(jìn)行軟件內(nèi)外目錄的同步,即系統(tǒng)循環(huán)訪問(wèn)每一個(gè)文件夾,判斷其中的文件是否有增加、修改或刪除操作,如果有,則同步到軟件視圖中。其缺點(diǎn)是該輪詢機(jī)制會(huì)持久、大量占用系統(tǒng)資源;同步緩慢,當(dāng)外部文件夾中的文件發(fā)生修改時(shí),只有當(dāng)輪詢到該文件夾時(shí)才會(huì)被同步,同步并不是實(shí)時(shí)的。Picasa采用實(shí)時(shí)監(jiān)控的方式來(lái)監(jiān)視文件夾,每當(dāng)發(fā)生文件的增加、修改或刪除操作,windows 應(yīng)用禾呈序接□ (API,Application Programming Interface)會(huì)通知 Picasa 進(jìn)行同步。其缺點(diǎn)是每次啟動(dòng)軟件時(shí),都會(huì)消耗大量資源進(jìn)行掃描(即遍歷文件夾下的所有文件);Picasa關(guān)閉時(shí)文件夾內(nèi)發(fā)生的修改是無(wú)法監(jiān)控的,其必須在啟動(dòng)時(shí)通過(guò)掃描來(lái)同步這些修改,這會(huì)消耗大量的系統(tǒng)資源,并減慢軟件啟動(dòng)速度。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法和系統(tǒng),以實(shí)現(xiàn)軟件內(nèi)外目錄的快速同步,并節(jié)省系統(tǒng)資源。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的本發(fā)明提供了一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,該方法包括在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程;所述輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)所述軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;所述輪詢線程掃描過(guò)的文件夾被添加到已訪問(wèn)文件夾列表中;所述實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,并在發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)所述軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新。該方法進(jìn)一步包括在計(jì)算機(jī)啟動(dòng)軟件時(shí),遍歷所述計(jì)算機(jī)的所有磁盤(pán)分區(qū),并為每個(gè)磁盤(pán)分區(qū)開(kāi)啟一個(gè)實(shí)時(shí)監(jiān)控線程進(jìn)行監(jiān)控。所述待掃描文件夾列表中包括所述軟件的文件夾樹(shù)中被選中的文件夾及其子文件夾和對(duì)應(yīng)通鋪中的文件夾。該方法進(jìn)一步包括所述輪詢線程對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描之前,判斷待掃描的文件夾是否存在于所述已訪問(wèn)文件夾列表中,如果存在,則不做掃描;如果不存在,則進(jìn)行掃描。所述實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,具體包括以下操作步驟a、所述實(shí)時(shí)監(jiān)控線程收到一條文件修改信息;步驟b、嘗試接收所述文件修改信息,并啟動(dòng)計(jì)時(shí)器;步驟C、判斷所述計(jì)時(shí)器超時(shí)前是否收到新的文件修改信息,如果收到,執(zhí)行步驟d;否則,執(zhí)行步驟e;步驟d、判斷所述新的文件修改信息與前一次接收的文件修改信息是否對(duì)應(yīng)同一文件夾,如果是,執(zhí)行步驟;否則,執(zhí)行步驟e ;步驟e、通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描;步驟f、重置計(jì)時(shí)器并返回步驟b。本發(fā)明還提供了一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng),該系統(tǒng)包括線程開(kāi)啟模塊,用于在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程;輪詢線程控制模塊,用于控制所述輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)所述軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;還用于將所述輪詢線程掃描過(guò)的文件夾添加到已訪問(wèn)文件夾列表中;實(shí)時(shí)監(jiān)控線程控制模塊,用于控制所述實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描;列表維護(hù)模塊,用于維護(hù)所述待掃描文件夾列表和已訪問(wèn)文件夾列表。所述線程開(kāi)啟模塊進(jìn)一步用于,在計(jì)算機(jī)啟動(dòng)軟件時(shí),遍歷所述計(jì)算機(jī)的所有磁盤(pán)分區(qū),為每個(gè)磁盤(pán)分區(qū)開(kāi)啟一個(gè)實(shí)時(shí)監(jiān)控線程進(jìn)行監(jiān)控。所述待掃描文件夾列表中包括所述軟件的文件夾樹(shù)中被選中的文件夾及其子文件夾和對(duì)應(yīng)通鋪中的文件夾。所述輪詢線程控制模塊進(jìn)一步用于,在控制所述輪詢線程對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描之前,判斷待掃描的文件夾是否存在于所述已訪問(wèn)文件夾列表中,如果存在,則不做掃描;如果不存在,則進(jìn)行掃描。
所述實(shí)時(shí)監(jiān)控線程控制模塊進(jìn)一步用于,控制所述實(shí)時(shí)監(jiān)控線程執(zhí)行以下操作步驟a、所述實(shí)時(shí)監(jiān)控線程收到一條文件修改信息;步驟b、嘗試接收所述文件修改信息,并啟動(dòng)計(jì)時(shí)器;步驟C、判斷所述計(jì)時(shí)器超時(shí)前是否收到新的文件修改信息,如果收到,執(zhí)行步驟d;否則,執(zhí)行步驟e;步驟d、判斷所述新的文件修改信息與前一次接收的文件修改信息是否對(duì)應(yīng)同一文件夾,如果是,執(zhí)行步驟f ;否則,執(zhí)行步驟e ;步驟e、通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描;步驟f、重置計(jì)時(shí)器并返回步驟b。本發(fā)明所提供的一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法和系統(tǒng),在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程;輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;輪詢線程掃描過(guò)的文件夾被添加到已訪問(wèn)文件夾列表中;實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,并在發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新。通過(guò)本發(fā)明,能夠快速響應(yīng)軟件外部文件夾中對(duì)文件的增加、修改和刪除操作,還能節(jié)省系統(tǒng)資源,不做不必要的掃描,不會(huì)在軟件啟動(dòng)時(shí)進(jìn)行大量掃描而造成性能瓶頸。
圖1為現(xiàn)有圖像處理工具的顯示界面的示意圖;圖2為本發(fā)明實(shí)施例的一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法流程圖;圖3為本發(fā)明實(shí)施例中文件修改信息的捕獲示意圖;圖4為本發(fā)明實(shí)施例的排重機(jī)制的流程圖;圖5為本發(fā)明實(shí)施例的一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)一步詳細(xì)闡述。本發(fā)明所提供的一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,如圖2所示,在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程(所述輪詢線程和實(shí)時(shí)監(jiān)控線程并行執(zhí)行);輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;輪詢線程掃描過(guò)的文件夾被添加到已訪問(wèn)文件夾列表中;實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,并在發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新。其中,在計(jì)算機(jī)啟動(dòng)軟件時(shí),可以遍歷計(jì)算機(jī)的所有磁盤(pán)分區(qū),并為每個(gè)磁盤(pán)分區(qū)開(kāi)啟一個(gè)實(shí)時(shí)監(jiān)控線程進(jìn)行監(jiān)控。輪詢線程負(fù)責(zé)掃描待掃描文件夾列表中的文件夾內(nèi)容的改變,下面結(jié)合圖2對(duì)輪詢線程的處理過(guò)程進(jìn)行詳細(xì)闡述。輪詢線程并不是輪詢計(jì)算機(jī)上的所有文件夾,而是輪詢待掃描文件夾列表中的文件夾,該列表即為圖1所示的界面上(文件夾樹(shù)和通鋪)展示的文件夾,包括文件夾樹(shù)中被用戶選中的文件夾及其子文件夾和對(duì)應(yīng)通鋪中的所有文件夾。例如用戶選中圖1所示文件夾樹(shù)中的文件夾boost_l_34_l,那么待掃描文件夾列表中的文件夾,即包括文件夾boost_l_34_l及其子文件夾,以及與boost_l_34_l及其子文件夾對(duì)應(yīng)的通鋪中的所有文件夾;輪詢線程隨即對(duì)上述文件夾列表中的文件夾進(jìn)行掃描,該掃描是對(duì)計(jì)算機(jī)磁盤(pán)的相應(yīng)文件夾的數(shù)據(jù)掃描,而不是對(duì)軟件內(nèi)部數(shù)據(jù)的掃描。由此可知,當(dāng)文件夾樹(shù)中選中的文件夾改變時(shí),待掃描文件夾列表也隨之改變。此外,由于計(jì)算機(jī)磁盤(pán)中的其他文件夾內(nèi)容的改變不會(huì)對(duì)圖1所示界面的展示造成影響,因此不做掃描。另外,輪詢線程不會(huì)重復(fù)掃描同一文件夾,除非實(shí)時(shí)監(jiān)控線程通知輪詢線程該文件夾的內(nèi)容發(fā)生了改變;輪詢線程掃描過(guò)的文件夾會(huì)被添加到已訪問(wèn)文件夾列表中,那么在下一次輪詢時(shí),如果發(fā)現(xiàn)待掃描的文件夾已經(jīng)存在于已訪問(wèn)文件夾列表中,則不會(huì)對(duì)其進(jìn)行掃描。相應(yīng)的,輪詢線程在對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描之前,需要首先判斷待掃描的文件夾是否存在于已訪問(wèn)文件夾列表中(即判斷該文件夾是否已被掃描),如果存在,則不做掃描;如果不存在,則進(jìn)行掃描。較佳的,輪詢線程的掃描速度可以控制在K個(gè)文件夾/5秒,即每5秒啟動(dòng)一次輪詢過(guò)程,每次輪詢過(guò)程遍歷待掃描文件夾列表中的K個(gè)文件夾,而不是遍歷待掃描文件夾列表中的所有文件夾;如果遍歷的文件夾在已訪問(wèn)文件夾列表中,則不需要掃描。如此一來(lái),可以控制每次輪詢過(guò)程中掃描文件夾的數(shù)量,以保證一次輪詢過(guò)程不會(huì)占用太多資源。也就是說(shuō),上述處理可以保證輪詢線程所消耗的系統(tǒng)資源是極低的,并且不會(huì)影響掃描的效果。需要說(shuō)明的是,每次文件夾掃描過(guò)程,會(huì)遍歷計(jì)算機(jī)磁盤(pán)中對(duì)應(yīng)該文件夾下的所有文件和子文件夾,查看其存在性、可見(jiàn)性(即是否為隱藏文件)以及最后修改時(shí)間等相關(guān)數(shù)據(jù),如果這些相關(guān)數(shù)據(jù)與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異,則依據(jù)所遍歷文件夾的相關(guān)數(shù)據(jù)對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新。這樣,即可準(zhǔn)確獲知文件的增加、修改和刪除等操作,其中還包括可見(jiàn)性的修改。另外,輪詢線程會(huì)根據(jù)待掃描文件夾列表中的信息來(lái)更新掃描的文件夾。每次軟件啟動(dòng)時(shí),界面中顯示上一次關(guān)閉時(shí)的視圖,軟件將上一次關(guān)閉時(shí)選中的文件夾、其一級(jí)子文件夾以及通鋪內(nèi)的所有文件夾放入待掃描文件夾列表中。實(shí)時(shí)監(jiān)控線程負(fù)責(zé)對(duì)計(jì)算機(jī)的各個(gè)磁盤(pán)中的文件夾內(nèi)容的改變進(jìn)行實(shí)施監(jiān)控,下面結(jié)合圖2對(duì)實(shí)時(shí)監(jiān)控線程的處理過(guò)程進(jìn)行詳細(xì)闡述。實(shí)時(shí)監(jiān)控線程可以通過(guò)ReadDirectoryChangesW函數(shù)來(lái)實(shí)現(xiàn)對(duì)文件夾的實(shí)時(shí)監(jiān)控,該ReadDirectoryChangesW函數(shù)是一個(gè)Windows API。通過(guò)該函數(shù),實(shí)時(shí)監(jiān)控線程可以快速獲知外部對(duì)文件或文件夾的增加、修改和刪除等操作。該函數(shù)可以通過(guò)同步和異步兩種方式進(jìn)行調(diào)用。所謂同步調(diào)用,是指程序運(yùn)行到該函數(shù)時(shí),不再繼續(xù)往下運(yùn)行(阻塞),直到Windows系統(tǒng)發(fā)出一個(gè)文件修改信息;ReadDirectoryChangesW函數(shù)捕獲該通知后,才繼續(xù)往下運(yùn)行程序。
所謂異步調(diào)用,是指程序運(yùn)行到該函數(shù)時(shí),立刻返回所有(也可能沒(méi)有)未被捕獲的文件修改信息,然后繼續(xù)往下執(zhí)行。此處,系統(tǒng)捕獲文件修改信息和軟件從系統(tǒng)獲得文件修改信息的過(guò)程是異步的;所謂的未被捕獲是從軟件的角度來(lái)說(shuō)的,而不是從系統(tǒng)的角度。文件修改信息的捕獲示意圖如圖3所示,當(dāng)文件發(fā)生修改時(shí),系統(tǒng)生成一條文件修改信息,放入文件修改信息池,系統(tǒng)不斷往池里放入文件修改信息,池里的信息稱為未被捕獲的文件修改信息;軟件調(diào)用ReadDirectoryChangesW函數(shù)來(lái)捕獲池中的信息,每次調(diào)用ReadDirectoryChangesW函數(shù),池中的內(nèi)容將被全部復(fù)制到軟件內(nèi)部的緩存中,被復(fù)制到軟件內(nèi)部緩存中的信息稱為被捕獲的。在使用同步方式調(diào)用ReadDirectoryChangesW函數(shù)時(shí),需要告知該函數(shù)要監(jiān)控的文件夾和要監(jiān)控的文件修改的類型,該類型如監(jiān)控文件的屬性(是否為隱藏文件等)變化、文件名的變化、文件的創(chuàng)建和文件夾名字的變化等等,然后調(diào)用的ReadDirectoryChangesW函數(shù)將阻塞。當(dāng)ReadDirectoryChangesW函數(shù)返回時(shí),能夠得到以鏈表形式組織的一系列文件修改信息,通過(guò)遍歷該鏈表,即能夠獲知哪些文件發(fā)生了怎樣的修改。需要說(shuō)明的是,當(dāng)某一個(gè)實(shí)時(shí)監(jiān)控線程獲取到一個(gè)文件修改信息時(shí),并不會(huì)立即通知輪詢線程掃描對(duì)應(yīng)的文件夾,而是會(huì)經(jīng)過(guò)一個(gè)排重的過(guò)程。因?yàn)橛脩艉芸赡苁窃谕粋€(gè)文件夾做一次批量操作(比如批量刪除)。這時(shí),實(shí)時(shí)監(jiān)控線程會(huì)依次捕獲若干條同一文件夾下的文件修改信息。事實(shí)上,只需要在這些操作全部做完后,通知輪詢線程對(duì)該文件夾進(jìn)行一次掃描即可,而不必每次收到一條信息都通知輪詢線程掃描一次,這樣也可以提高效率,節(jié)省掃描所消耗的系統(tǒng)資源。下面結(jié)合圖4,對(duì)實(shí)時(shí)監(jiān)控中的排重機(jī)制進(jìn)行詳細(xì)說(shuō)明,主要包括以下步驟步驟401,實(shí)時(shí)監(jiān)控線程收到一條文件修改信息。步驟402,該實(shí)時(shí)監(jiān)控線程嘗試接收該文件修改信息,存儲(chǔ)該文件修改信息所在的文件夾路徑,并啟動(dòng)計(jì)時(shí)器η,η的取值可以為500毫秒。步驟403,判斷是否收到新的文件修改信息,如果收到,執(zhí)行步驟405 ;否則,執(zhí)行步驟404。步驟404,判斷計(jì)時(shí)是否結(jié)束,即計(jì)時(shí)器是否超時(shí),如果是,執(zhí)行步驟407 ;否則,返回步驟402。步驟405,判斷新的文件修改信息與前一次接收的文件修改信息是否對(duì)應(yīng)同一文件夾,即判斷新的文件修改信息的文件夾路徑與前一次接收的文件修改信息的文件夾路徑是否相同,如果是,執(zhí)行步驟406 ;否則,執(zhí)行步驟407。步驟406,重置計(jì)時(shí)器η并返回步驟402。步驟407,結(jié)束排重,通知輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描。實(shí)時(shí)監(jiān)控線程檢查改變的文件夾是否存在于已訪問(wèn)文件夾列表中,如果是,則從中刪除;再檢查改變的文件夾是否存在于待掃描文件夾列表中,如果是,則將該文件夾移到待掃描文件夾列表的頭部等待掃描,如果不是,則添加該文件夾到待掃描文件夾列表的頭部等待掃描。例如實(shí)時(shí)監(jiān)控線程先收到一條文件修改信息1,存儲(chǔ)其文件夾路徑為文件夾A ;在計(jì)時(shí)器η超時(shí)前又收到一條文件修改信息2,如果文件修改信息2的文件夾路徑為文件夾B,則實(shí)時(shí)監(jiān)控線程結(jié)束本次排重,通知輪詢線程對(duì)文件夾A進(jìn)行掃描;如果文件修改信息2的文件夾路徑為文件夾A,則重置計(jì)時(shí)器n,并重新嘗試新的接收文件修改信息(即返回上述步驟302繼續(xù)執(zhí)行后續(xù)操作)。依次類推,通過(guò)上述排重機(jī)制,能夠提高輪詢線程的掃描效率,節(jié)省輪詢線程的掃描次數(shù),從而節(jié)省掃描所消耗的系統(tǒng)資源。本發(fā)明的上述實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法應(yīng)用于圖1所示的圖像處理軟件中,具體包括在計(jì)算機(jī)啟動(dòng)圖像處理軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程(所述輪詢線程和實(shí)時(shí)監(jiān)控線程并行執(zhí)行);輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與圖像處理軟件內(nèi)部文件夾中的圖片數(shù)據(jù)存在差異時(shí),對(duì)圖像處理軟件內(nèi)部文件夾中的圖片數(shù)據(jù)進(jìn)行更新;輪詢線程掃描過(guò)的文件夾被添加到已訪問(wèn)文件夾列表中;實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,并在發(fā)現(xiàn)掃描的文件夾與圖像處理軟件內(nèi)部文件夾中的圖片數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的圖片數(shù)據(jù)進(jìn)行更新。其中,輪詢線程并不是輪詢計(jì)算機(jī)上的所有文件夾,而是輪詢待掃描文件夾列表中的文件夾,該列表即為圖1所示的界面上(文件夾樹(shù)和通鋪)展示的文件夾,包括文件夾樹(shù)中被用戶選中的文件夾及其子文件夾和對(duì)應(yīng)通鋪中的所有文件夾。實(shí)時(shí)監(jiān)控線程可以通過(guò)ReadDirectoryChangesW函數(shù)來(lái)實(shí)現(xiàn)對(duì)文件夾的實(shí)時(shí)監(jiān)控。另外,當(dāng)某一個(gè)實(shí)時(shí)監(jiān)控線程獲取到一個(gè)文件修改信息時(shí),并不會(huì)立即通知輪詢線程掃描對(duì)應(yīng)的文件夾,而是會(huì)經(jīng)過(guò)一個(gè)圖4所示的排重的過(guò)程,以提高效率,節(jié)省掃描所消耗的系統(tǒng)資源。對(duì)應(yīng)上述實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,本發(fā)明還提供了一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng),如圖5所示,該系統(tǒng)包括線程開(kāi)啟模塊10、輪詢線程控制模塊20、實(shí)時(shí)監(jiān)控線程控制模塊30和列表維護(hù)模塊40。其中,線程開(kāi)啟模塊10,用于在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程。輪詢線程控制模塊20,連接線程開(kāi)啟模塊10,用于控制輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;還用于將輪詢線程掃描過(guò)的文件夾添加到已訪問(wèn)文件夾列表中。實(shí)時(shí)監(jiān)控線程控制模塊30,連接線程開(kāi)啟模塊10,用于控制實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描。列表維護(hù)模塊40,連接輪詢線程控制模塊20和實(shí)時(shí)監(jiān)控線程控制模塊30,用于維護(hù)待掃描文件夾列表和已訪問(wèn)文件夾列表。較佳的,線程開(kāi)啟模塊10還可用于,在計(jì)算機(jī)啟動(dòng)軟件時(shí),遍歷計(jì)算機(jī)的所有磁盤(pán)分區(qū),為每個(gè)磁盤(pán)分區(qū)開(kāi)啟一個(gè)實(shí)時(shí)監(jiān)控線程進(jìn)行監(jiān)控。較佳的,輪詢線程控制模塊20還可用于,在控制輪詢線程對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描之前,判斷待掃描的文件夾是否存在于已訪問(wèn)文件夾列表中,如果存在,則不做掃描;如果不存在,則進(jìn)行掃描。較佳的,實(shí)時(shí)監(jiān)控線程控制模塊30還可用于,控制實(shí)時(shí)監(jiān)控線程執(zhí)行以下操作步驟a、實(shí)時(shí)監(jiān)控線程收到一條文件修改信息;步驟b、嘗試接收文件修改信息,并啟動(dòng)計(jì)時(shí)器;
步驟C、判斷計(jì)時(shí)器超時(shí)前是否收到新的文件修改信息,如果收到,執(zhí)行步驟d ;否則,執(zhí)行步驟e;步驟d、判斷新的文件修改信息與前一次接收的文件修改信息是否對(duì)應(yīng)同一文件夾,如果是,執(zhí)行步驟f ;否則,執(zhí)行步驟e ;步驟e、通知輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描;步驟f、重置計(jì)時(shí)器并返回步驟b。綜上所述,本發(fā)明通過(guò)結(jié)合輪詢和實(shí)時(shí)監(jiān)控這兩種機(jī)制,不僅能夠快速響應(yīng)軟件外部文件夾中對(duì)文件的增加、修改和刪除操作,而且還能節(jié)省系統(tǒng)資源,不做不必要的掃描,不會(huì)在軟件啟動(dòng)時(shí)進(jìn)行大量掃描而造成性能瓶頸。此外,本發(fā)明不僅適用于圖像處理工具,也適用于其他需要實(shí)現(xiàn)軟件內(nèi)外目錄同步的文件處理工具。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,其特征在于,該方法包括在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程;所述輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)所述軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;所述輪詢線程掃描過(guò)的文件夾被添加到已訪問(wèn)文件夾列表中;所述實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,并在發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)所述軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新。
2.根據(jù)權(quán)利要求1所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,其特征在于,該方法進(jìn)一步包括在計(jì)算機(jī)啟動(dòng)軟件時(shí),遍歷所述計(jì)算機(jī)的所有磁盤(pán)分區(qū),并為每個(gè)磁盤(pán)分區(qū)開(kāi)啟一個(gè)實(shí)時(shí)監(jiān)控線程進(jìn)行監(jiān)控。
3.根據(jù)權(quán)利要求1所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,其特征在于,所述待掃描文件夾列表中包括所述軟件的文件夾樹(shù)中被選中的文件夾及其子文件夾和對(duì)應(yīng)通鋪中的文件夾。
4.根據(jù)權(quán)利要求1、2或3所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,其特征在于,該方法進(jìn)一步包括所述輪詢線程對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描之前,判斷待掃描的文件夾是否存在于所述已訪問(wèn)文件夾列表中,如果存在,則不做掃描;如果不存在,則進(jìn)行掃描。
5.根據(jù)權(quán)利要求1、2或3所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法,其特征在于,所述實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,具體包括以下操作步驟a、所述實(shí)時(shí)監(jiān)控線程收到一條文件修改信息;步驟b、嘗試接收所述文件修改信息,并啟動(dòng)計(jì)時(shí)器;步驟C、判斷所述計(jì)時(shí)器超時(shí)前是否收到新的文件修改信息,如果收到,執(zhí)行步驟d ;否則,執(zhí)行步驟e;步驟d、判斷所述新的文件修改信息與前一次接收的文件修改信息是否對(duì)應(yīng)同一文件夾,如果是,執(zhí)行步驟f ;否則,執(zhí)行步驟e ;步驟e、通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描;步驟f、重置計(jì)時(shí)器并返回步驟b。
6.一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng),其特征在于,該系統(tǒng)包括線程開(kāi)啟模塊,用于在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程;輪詢線程控制模塊,用于控制所述輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)所述軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;還用于將所述輪詢線程掃描過(guò)的文件夾添加到已訪問(wèn)文件夾列表中;實(shí)時(shí)監(jiān)控線程控制模塊,用于控制所述實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描;列表維護(hù)模塊,用于維護(hù)所述待掃描文件夾列表和已訪問(wèn)文件夾列表。
7.根據(jù)權(quán)利要求6所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng),其特征在于,所述線程開(kāi)啟模塊進(jìn)一步用于,在計(jì)算機(jī)啟動(dòng)軟件時(shí),遍歷所述計(jì)算機(jī)的所有磁盤(pán)分區(qū),為每個(gè)磁盤(pán)分區(qū)開(kāi)啟一個(gè)實(shí)時(shí)監(jiān)控線程進(jìn)行監(jiān)控。
8.根據(jù)權(quán)利要求6所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng),其特征在于,所述待掃描文件夾列表中包括所述軟件的文件夾樹(shù)中被選中的文件夾及其子文件夾和對(duì)應(yīng)通鋪中的文件夾。
9.根據(jù)權(quán)利要求6、7或8所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng),其特征在于,所述輪詢線程控制模塊進(jìn)一步用于,在控制所述輪詢線程對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描之前,判斷待掃描的文件夾是否存在于所述已訪問(wèn)文件夾列表中,如果存在,則不做掃描;如果不存在,則進(jìn)行掃描。
10.根據(jù)權(quán)利要求6、7或8所述實(shí)現(xiàn)軟件內(nèi)外目錄同步的系統(tǒng),其特征在于,所述實(shí)時(shí)監(jiān)控線程控制模塊進(jìn)一步用于,控制所述實(shí)時(shí)監(jiān)控線程執(zhí)行以下操作步驟a、所述實(shí)時(shí)監(jiān)控線程收到一條文件修改信息;步驟b、嘗試接收所述文件修改信息,并啟動(dòng)計(jì)時(shí)器;步驟C、判斷所述計(jì)時(shí)器超時(shí)前是否收到新的文件修改信息,如果收到,執(zhí)行步驟d ;否則,執(zhí)行步驟e;步驟d、判斷所述新的文件修改信息與前一次接收的文件修改信息是否對(duì)應(yīng)同一文件夾,如果是,執(zhí)行步驟f ;否則,執(zhí)行步驟e ;步驟e、通知所述輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描;步驟f、重置計(jì)時(shí)器并返回步驟b。
全文摘要
本發(fā)明公開(kāi)了一種實(shí)現(xiàn)軟件內(nèi)外目錄同步的方法和系統(tǒng),方法包括在計(jì)算機(jī)啟動(dòng)軟件時(shí),開(kāi)啟一個(gè)輪詢線程和至少一個(gè)實(shí)時(shí)監(jiān)控線程;輪詢線程按照預(yù)定的掃描速度對(duì)待掃描文件夾列表中的文件夾進(jìn)行掃描,當(dāng)發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新;輪詢線程掃描過(guò)的文件夾被添加到已訪問(wèn)文件夾列表中;實(shí)時(shí)監(jiān)控線程對(duì)計(jì)算機(jī)的磁盤(pán)進(jìn)行實(shí)時(shí)監(jiān)控,在獲取到文件修改信息時(shí),通知輪詢線程對(duì)發(fā)生修改的文件夾進(jìn)行掃描,并在發(fā)現(xiàn)掃描的文件夾與軟件內(nèi)部文件夾中的數(shù)據(jù)存在差異時(shí),對(duì)軟件內(nèi)部文件夾中的數(shù)據(jù)進(jìn)行更新。通過(guò)本發(fā)明,使用極少的資源開(kāi)銷,實(shí)現(xiàn)了實(shí)時(shí)準(zhǔn)確的軟件內(nèi)外目錄同步。
文檔編號(hào)G06F17/30GK102567341SQ20101059186
公開(kāi)日2012年7月11日 申請(qǐng)日期2010年12月9日 優(yōu)先權(quán)日2010年12月9日
發(fā)明者傅斌, 楊洋, 王建宇, 黃淵, 黃飛躍 申請(qǐng)人:騰訊科技(深圳)有限公司