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

Ofe*_*all 1 coldfusion recursion cfdirectory

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

我想,我可以用cfdirectory输出两个目录的结构,然后遍历这些文件只有在图像存在,而不是在缩略图目录,然后运行一个函数来调整图像,并将它们发送到缩略图目录.

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

Ada*_*tle 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>
Run Code Online (Sandbox Code Playgroud)