Olá pessoal…
Hoje vou mostrar 3 formas de copiar arquivos utilizando a linguagem AdvPL (irei exemplificar a cópia de arquivos de dentro da Protheus Data para uma estação que está executando o Smart Client).
Primeiramente iremos declarar 4 variáveis, uma delas contendo a pasta temporária da máquina (função GetTempPath()), a segunda, nossa pasta customizada dentro da Protheus Data (representada pela pasta \x_diretorio\), a pasta que contendo o caminho da Protheus Data na rede (para exemplificarmos a cópia utilizando o Windows) e por último, o Array que contém os arquivos PDF do diretório do servidor:
//Definindo os diretórios cDirUsr := GetTempPath() cDirSrv := '\x_Diretorio\' cDirFull := '\\SEU_IP\Protheus_Data' + cDirSrv aDirAux := Directory(cDirSrv+'*.pdf')
Agora iremos utilizar um exemplo da função __CopyFile, esta função permite copiar arquivos entre o servidor e a estação, assim como inverso.
//Percorre os arquivos For nAtual := 1 To Len(aDirAux) //Pegando o nome do arquivo cNomArq := aDirAux[nAtual][1] //Copia o arquivo do Servidor para a máquina do usuário __CopyFile(cDirSrv+cNomArq, cDirUsr+cNomArq) Next nAtual
O exemplo abaixo, é a função CpyS2T (veja CpyS2T no TDN), que copia arquivos do Servidor (Protheus Data) para a estação.
//Percorre os arquivos For nAtual := 1 To Len(aDirAux) //Pegando o nome do arquivo cNomArq := aDirAux[nAtual][1] //Copia o arquivo do Servidor para a máquina do usuário CpyS2T(cDirSrv+cNomArq, cDirUsr) Next nAtual
E por último, utilizamos a função WaitRun (veja WaitRun no TDN), para realizar a cópia utilizando um comando do MS-DOS no AdvPL, no caso, o comando é o XCOPY (dúvidas sobre o comando, clique aqui), que pode inclusive realizar cópias entre servidores, desde que se tenha acesso, que é o nosso exemplo, utilizamos uma cópia utilizando \\ para acessar o servidor.
WaitRun("XCOPY " +cDirFull+ "*.pdf " + cDirUsr +" /y")
Update 18/06/2016:
Abaixo o trecho de código para copiar arquivos da estação para o servidor (sugestão do Felipe Pelegrini):
cDirServ := "\x_arquivos\" cDirLocal := "E:\" cArquivo := "teste.txt" //Copiando o arquivo via __CopyFile (nesse é possível alterar o nome do arquivo de destino, por exemplo, teste2.txt) __CopyFile(cDirLocal+cArquivo, cDirServ+cArquivo+"2") //Copiando o arquivo via CpyT2S CpyT2S(cDirLocal+cArquivo, cDirServ)
Bom pessoal, por hoje é só.
Abraços e até a próxima.
em ambas as funções o arquivo é copiado do Servidor para o Client…. eu consigo copiar o arquivo do CLient para o Servidor? vou validar extensão e tamanho antes disso, mas é anexo.
Boa tarde Felipe, tudo bem?
Atualizei a postagem, para também realizar cópias da estação para o servidor, você pode utilizar tanto a __CopyFile como a CpyT2S. Abaixo o exemplo:
Caso precise, ambas retornam .T. ou .F.
Se tiver outras sugestões, pode entrar em contato.
Um grande abraço.
como faço para copiar arquivos no MAC?
Boa noite Jose.
Não sei te dizer, pois não tenho Mac.
Mas tente utilizar a função __CopyFile.
Um grande abraço.
Muito bom. Há alguma forma de copiar um arquivo disponível em uma url publica para uma pasta no servidor?
Bom dia Anderson.
Olha jovem, nunca fiz algo parecido, só via FTP. Mas tente utilizar a função HttpGet, pode ser que dê certo.
Abraços jovem.