Como extrair todas as imagens do RPO em uma pasta | Ti Responde 0072

No vídeo de hoje, vamos demonstrar em como extrair as imagens contidas dentro de um RPO (Repositório de Objetos).

A dúvida de hoje, nos perguntaram, se seria possível extrair todas as imagens contidas dentro de um RPO, sendo possível assim analisar o nome dos arquivos.

 

Pensando nisso, montamos um exemplo, onde primeiro é usado a TFileDialog para perguntar em qual pasta deseja extrair. Em seguida é usado a função GetResArray buscando todos os arquivos com extensão png e por último é percorrido esses arquivos e extraído a imagem através da função Resource2File.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "Totvs.ch"

/*/{Protheus.doc} User Function zVid0072
Função para extrair as imagens do RPO para dentro de uma pasta
@author Atilio
@since 20/02/2023
@version 1.0
@type function
/*/

User Function zVid0072()
	Local aArea    := FWGetArea()
    Local cTitulo  := "Selecione a pasta para a extração de arquivos do RPO"
    Local cDirIni  := GetTempPath()
    Local cTipArq  := ""
    Local lSalvar  := .F.
    Private cPasta := ""

    //Abre a tela apra selecionar uma pasta
    cPasta := tFileDialog(;
        cTipArq,;                  // Filtragem de tipos de arquivos que serão selecionados
        cTitulo,;                  // Título da Janela para seleção dos arquivos
        ,;                         // Compatibilidade
        cDirIni,;                  // Diretório inicial da busca de arquivos
        lSalvar,;                  // Se for .T., será uma Save Dialog, senão será Open Dialog
        GETF_RETDIRECTORY;         // Se não passar parâmetro, irá pegar apenas 1 arquivo; Se for informado GETF_MULTISELECT será possível pegar mais de 1 arquivo; Se for informado GETF_RETDIRECTORY será possível selecionar o diretório
    )

    //Se tem a pasta e ela existe
    If ! Empty(cPasta) .And. ExistDir(cPasta)

        //Se o último caractere não for uma barra, adiciona, ex.: "C:\pasta" -> "C:\pasta\"
        cPasta := Alltrim(cPasta)
        If Right(cPasta, 1) != "\"
            cPasta += "\"
        EndIf

        //Aciona a extração de arquivos
        Processa({|| fExtrai()}, 'Processando...')
    EndIf
	
	FWRestArea(aArea)
Return

Static Function fExtrai()
    Local aArea      := FWGetArea()
    Local aArquivos  := {}
    Local cArqui     := ""
    Local nArqAtu    := 0
    Local nTotal     := 0

    //Busca todos os arquivos que sejam do tipo PNG
    aArquivos := GetResArray("*.png")

    //Define o tamanho da régua
    nTotal := Len(aArquivos)
    ProcRegua(nTotal)

    //Percorre todos os arquivos
    For nArqAtu := 1 To nTotal
        //Incrementa a régua
        IncProc("Extraindo arquivo " + cValToChar(nArqAtu) + " de " + cValToChar(nTotal) + "...")

        //Pega o nome do arquivo atual
        cArqui := aArquivos[nArqAtu]

        //Extrai o arquivo dentro da pasta selecionada
        Resource2File(cArqui, cPasta + cArqui)
    Next
	
	//Abre a pasta
	ShellExecute("OPEN", "explorer.exe", cPasta, "C:\", 1)

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação