使用cfdirectory在两个目录中查找不匹配的文件并执行功能

时间:2011-10-20 23:28:54

标签: recursion coldfusion cfdirectory

在我的应用程序中,用户上传照片,cfc调整照片大小,创建新图像并将新图像调整为缩略图。麻烦的是,这个功能在游戏早期没有提供。我现在想看一下images目录,找出哪些图像没有缩略图。

我在想我可以使用cfdirectory输出两个目录的结构,然后循环遍历存在于图像中而不是缩略图目录中的文件并运行一个函数来调整大小图像并将它们发送到缩略图目录。

这有缺陷吗?有更简单的方法吗?

1 个答案:

答案 0 :(得分: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>