Movendo arquivos de uma pasta para outra
Problema:
Como podemos usar ColdFusion recursivamente para mover arquivos de uma pasta (diretório) para outra ?
Solução:
A tag cfdirectory do ColdFusion permite voce rapidamente obter os arquivos de uma pasta. Uma solução seria simplesmente listar todos os arquivos de um diretório fonte e então copia-los (cada um) para o destino. Entretanto, voce deve se assegurar que os sub-diretórios do diretório fonte existam no diretório destino.
Solução detalhada:
Para mover, ou copiar, arquivos de uma pasta para outra, comece criando uma lista dos arquivos dentro do diretório destino. No bloco código abaixo eu defini um diretório fonte e destino, e criei uma lista de arquivos do diretório fonte. Note que nós filtramos a lista para arquivos e usamos a opção recurse.
<cfset sourcedir = expandPath("./mgtest1")>
<cfset destdir = expandPath("./mgtestdump")>
<cfdirectory action="list" directory="#sourcedir#" recurse="true" name="files" type="file">
Agora nós precisamos iterar sobre a query retornada pela tag cfdirectory.
<cfloop query="files">
Para cada arquivo, precisamos determinar se o arquivo está em um sub-diretório sob a pasta original. Isso pode ser checado com um simples replace no diretório e arquivo do registro da query.
<!--- get the subdir under source dir if there --->
<cfset subdir = replace(directory, sourcedir, "")>
<cfif len(subdir)>
Se tivermos um valor para subdir, então será um subdiretório que precisaremos criar no destino:
<!--- create the dir in dest if not there --->
<cfif not directoryExists(destdir & "/" & subdir)>
<cfdirectory action="create" directory="#destdir#/#subdir#">
</cfif>
Finalmente, nós terminamos o bloco IF que verificou o tamanho de subdir, movemos (ou copiamos) o arquivo, e fechamos o loop:
</cfif>
<cffile action="move" source="#directory#/#name#"destination="#destdir#/#subdir#/#name#">
</cfloop>
Este código especificamente não cuida de esvaziar os sub-diretórios no diretório fonte. O código completo está abaixo:
<cfset sourcedir = expandPath("./mgtest1")>
<cfset destdir = expandPath("./mgtestdump")>
<cfdirectory action="list" directory="#sourcedir#" recurse="true" name="files" type="file">
<cfloop query="files">
<!--- get the subdir under source dir if there --->
<cfset subdir = replace(directory, sourcedir, "")>
<cfif len(subdir)>
<!--- create the dir in dest if not there --->
<cfif not directoryExists(destdir & "/" & subdir)>
<cfdirectory action="create" directory="#destdir#/#subdir#">
</cfif>
</cfif>
<cffile action="copy" source="#directory#/#name#" destination="#destdir#/#subdir#/#name#">
</cfloop>
Versão em inglês: Adobe ColdFusion Cookbook
0 responses to “Movendo arquivos de uma pasta para outra”