2011-10-20 33 views
1

在我的應用程序中,用戶上傳照片,cfc調整照片大小,創建新圖像並將新圖像調整爲縮略圖。麻煩的是,這個功能在遊戲中並沒有提供。我現在想看看圖像目錄並找出哪些圖像沒有縮略圖。使用cfdirectory在兩個目錄中查找不匹配的文件並執行功能

我想,我可以用cfdirectory輸出兩個目錄的結構,然後遍歷所有的文件圖像中的存在,而不是在縮略圖目錄,然後運行一個函數來調整圖像,並將它們發送到縮略圖目錄。

這是有缺陷的想法嗎?有更容易的方法嗎?

+0

對於一次性操作?每個文件中有多少個文件以及命名約定是什麼? – Leigh

+0

@Leigh這是一次性操作。一個文件夾中有大約500個文件,縮略圖文件夾中有400個文件。他們都有相同的名稱,只是不同的文件夾...我用一些jQuery的縮略圖的文件名來調用圖像文件夾中的較大圖像。 – Ofeargall

回答

5

這是一個完全合理的方法,您甚至不必使用遞歸代碼。只需使用CFDirectory中的遞歸選項來獲取所有文件的列表,並使用文件名和路徑組合作爲密鑰,從而保證您正在檢查的唯一文件。您可能需要稍微修改一下結果,以便確切知道放置新縮略圖的位置,但這應該會讓您非常靠近。

<cfset originals_path = expandPath('originals') /> 
<cfset thumbs_path = expandPath('thumbs') /> 

<cfset no_thumbs = find_missing_thumbs(originals_path, thumbs_path) /> 
<cfdump var="#no_thumbs#" /> 

<cffunction name="find_missing_thumbs"> 
    <cfargument name="o" /> 
    <cfargument name="t" /> 

    <cfset var originals = 0 /> 
    <cfset var thumbs = 0 /> 
    <cfset var missing_thumbs = [] /> 
    <cfset var massaged_originals = 0 /> 
    <cfset var massaged_thumbs = 0 /> 
    <cfset var qSearch = 0 /> 

    <cfdirectory action="list" directory="#arguments.o#" name="originals" recurse="true" /> 
    <cfdirectory action="list" directory="#arguments.t#" name="thumbs" recurse="true" /> 

    <cfquery name="massaged_originals" dbtype="query"> 
     select name, directory + name as fullpath from originals 
    </cfquery> 
    <cfquery name="massaged_thumbs" dbtype="query"> 
     select name, directory + name as fullpath from thumbs 
    </cfquery> 

    <cfloop query="massaged_originals"> 
     <cfquery name="qSearch" dbtype="query"> 
      select massaged_thumbs.name from massaged_thumbs where massaged_thumbs.fullpath = '#massaged_originals.fullpath#' 
     </cfquery> 
     <cfif qSearch.recordCount eq 0> 
      <cfset arrayAppend(missing_thumbs, massaged_originals.name) /> 
     </cfif> 
    </cfloop> 
    <cfreturn missing_thumbs /> 
</cffunction> 
+0

那天我跑過這個小寶石,看起來工作得很好!比較目錄時,它使用'not fileExists'。 ' – Ofeargall

+0

整個事情以''...開頭,只有兩個文件夾中的圖像名稱相同纔有效。 – Ofeargall

相關問題