Equivalente a xcopy

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Equivalente a xcopy

Mensagem por TerraSoftware »

Caros colegas, existe algum comando e/ou funcao no xharbour equivalente ao comando xcopy?

Preciso criar uma rotina para copiar toda uma estrutura de pastas,subpastas e arquivos, mas gostaria de copiar tudo de uma vez, o comando do MS-DOS xcopy faz exatamente isso, mas eu nao gosto de chamar comandos MS-DOS devido a tela preta que aparece.

Obs.: Pode ser rotina em C ou API do windows.

Obrigado!
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Equivalente a xcopy

Mensagem por alxsts »

Olá!
TerraSoftware escreveu:eu nao gosto de chamar comandos MS-DOS devido a tela preta que aparece.
Não conheço comando ou função próprios para executar esta tarefa.

Quando preciso executar um comando DOS, para evitar a janela preta, utilizo o parâmetro /B do comando START do DOS (faz com que a tarefa seja executada sem abrir nova janela).

Código: Selecionar todos

 RUN "CMD /C START /B XCOPY C:\Teste X:\Teste /S"
Dê uma olhada na sintaxe do START, digitando START /? numa janela DOS. Veja também os parâmetros e /SEPARATE.
[]´s
Alexandre Santos (AlxSts)
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Re: Equivalente a xcopy

Mensagem por TerraSoftware »

Muito bom colega, obrigado, funcionou em windows com kernel NT, em win98 nao deu certo, pois nele nao existe o cmd.exe, alguma sugestao?
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Equivalente a xcopy

Mensagem por alxsts »

Olá!

Fico feliz que tenha funcionado!

Não tenho como testar no Win98. Tente substituir o RUN Cmd por RUN Command (Lembra-se do velho Command.Com?). Você terá que identificar em qual plataforma sua aplicação está sendo executada...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Equivalente a xcopy

Mensagem por sygecom »

Pode tentar usar o MYRUN() para chamar essa sua rotina sem mostrar nada na tela:

MYRUN("XCOPY C:\Teste X:\Teste /S")

Código: Selecionar todos

************************** 
function MYRUN( cComando ) 
************************** 
local oShell, RET 

oShell := CreateObject( "WScript.Shell" ) 
RET := oShell:Run( "%comspec% /c " + cComando, 0, .T. ) 
oShell := NIL 

return iif( RET = 0, .T., .F. ) 
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Equivalente a xcopy

Mensagem por Maligno »

Usar comando de linha em um programa Windows é dose. Melhor seria dedicar um tempo e implementar esse recurso numa função, já que muitas vezes é bem útil. Uma função recursiva pode resolver isso.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Equivalente a xcopy

Mensagem por sygecom »

Concordo com o Maligno, tentei procurar aqui uma função que fiz logo que comecei com xHarbour que fazia exatamente isso, mas deva está no meu NOTE em casa, assim que sobrar um tempinho vou tentar achar !
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
wagner aragao
Usuário Nível 2
Usuário Nível 2
Mensagens: 58
Registrado em: 30 Jan 2008 02:06
Localização: PORTO VELHO-RONDÔNIA

Re: Equivalente a xcopy

Mensagem por wagner aragao »

Olá,

Uso para copiar varios arquivos de uma pasta para outra o seguinte codigo :

Código: Selecionar todos


cDirFonte := 'C:\MLINE'
cDirBack   := 'C:\Backup'

aArqCli   := Array( ADir( Alltrim(cDirFonte) + '\*.???' ) )
aDirCli   := ADir( Alltrim(cDirFonte) + '\*.???', aArqCli )   // dados do cliente

*** Faz a copia dos dados do cliente para o diretorio de back-up '*.*' ***
nTOTAL_REC  := Len( aArqCli )
nCORRENTE   := 0

@ 22, 55 say 'Etapa ' + strzero(++etapa,2) + ' de ' + STRZERO(NUM_ETAPA,2)

*** Realiza backup de todos os arquivos ***
for p := 1 to Len( aArqCli )
    nCORRENTE++
    cArq1 := alltrim(cDirFonte) + '\' + aArqCli[p]
    cArq2 := alltrim(cDirBack) + '\' + aArqCli[p]

    @ 13, 01 clear to 21,79
    limpa(24)
    @ 24, 04 say ' Gerando Back-Up....'
    @ 16, 04 say ' Origem : ' + cArq1
    @ 17, 04 say 'Destino : ' + cArq2
    @ 19, 04 say 'Quantidade de arquivos : ' + strzero(nTOTAL_REC,3)
    @ 20, 04 say '   Quantidade copiados : ' + strzero(nCORRENTE,3)
    @ 21, 04 say '       Status Operacao : Copiando...'
    copy file &cArq1 to &cArq2
next
@ 16, 04 say '       Status Operacao : OK...      '
inkey(2)

Espero ter ajudado...
t+
xHarbour 1.2.3 Simplex / xDev 0.70 / LetoDB 2.15b37 / HWGUI 2.17 / xDesigner (LF Basso)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Equivalente a xcopy

Mensagem por lugab »

To com o mesmo problema, ao dar RUN em alguma coisa, de dentro do meu programa.

Vou experimentar todas essas dicas
lugab
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Re: Equivalente a xcopy

Mensagem por TerraSoftware »

Caros colegas.
O que realmente resolveu meu problema foi a funcao do sygecom. Ela funciona perfeitamente, posso envocar qualquer comando do MS-DOS de forma transparente, o usuario nao percebe nada. O unico problema é que ela só funciona em kernel NT. Entao fiz o seguinte:

Código: Selecionar todos

************************
function myrun(cComando)
************************
local oShell,RET
if os_iswinnt()
   oShell := CreateObject( "WScript.Shell" ) 
   RET := oShell:Run( "%comspec% /c " + cComando, 0, .T. ) 
   oShell := NIL 
else
   winexec(cComando,2)
endif
return
A funcao winexec pertence a HWGUI, mas o codigo dela pode facilmente ser achado aqui mesmo no forum. O primeiro parametro dela é a linha de comando a ser executada, o segundo parametro e a forma que a janela sera apresentada, neste caso, parametro 2, ira executar minimizado. Desda forma em win98 eu consigo executar comandos do MS-DOS sem aparecer a telinha preta do dos, aparece apenas o nome da janela na barra de tarefas do windows.
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Responder