Используйте cfdirectory, чтобы найти несопоставленные файлы в двух каталогах и выполнить функцию
В моем приложении пользователь загружает фотографии, и CFC изменяет размер фотографии, создает новое изображение и изменяет размеры этого нового изображения в миниатюру. Проблема в том, что эта функция не была доступна ранее в игре. Теперь я хочу посмотреть в каталог изображений и выяснить, какие изображения не имеют миниатюр.
Я думаю, что я мог бы использовать cfdirectory для вывода структуры обоих каталогов, а затем перебрать файлы, которые существуют только в изображениях, а не в каталоге миниатюр, и запустить функцию для изменения размера изображений и отправки их в каталог миниатюр.
Это ошибочное мышление? Есть ли более простой способ?
1 ответ
Это совершенно разумный подход, и вам даже не нужно использовать рекурсивный код. Просто используйте рекурсивную опцию в 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>