Используйте cfdirectory, чтобы найти несопоставленные файлы в двух каталогах и выполнить функцию - PullRequest
1 голос
/ 21 октября 2011

В моем приложении пользователь загружает фотографии, и CFC изменяет размер фотографии, создает новое изображение и изменяет размеры этого нового изображения в миниатюру. Проблема в том, что эта функция не была доступна ранее в игре. Теперь я хочу взглянуть на каталог изображений и выяснить, на каких изображениях нет миниатюр.

Я думаю, что я мог бы использовать cfdirectory для вывода структуры обоих каталогов, затем перебрать файлы, которые только существуют в изображениях, а не в каталоге миниатюр, и запустить функцию для изменения размера изображений и отправьте их в каталог миниатюр.

Это ошибочное мышление? Есть ли более простой способ?

1 Ответ

5 голосов
/ 21 октября 2011

Это вполне разумный подход, и вам даже не нужно использовать рекурсивный код. Просто используйте рекурсивную опцию в 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>
...