«

»

Nov 22

Print this Post

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>

by Ray Camden
Versão em inglês: Adobe ColdFusion Cookbook

Permanent link to this article: http://ensina.me/coldfusion/movendo-arquivos-de-uma-pasta-para-outra/

Leave a Reply