Busca de Unidades no Computador

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

Moderador: Moderadores

Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Busca de Unidades no Computador

Mensagem por Laudelino Scarmagnani »

Pessoal, bom dia!
Alguem tem algo parecido, ou sabe se tem como,
preciso criar uma rotina de BackUp simples, para copia em penDrive. Só que o penDrive, uma hora é G:, outra é F:,
desta forma não da para fezer um arquivo.bat para executar.
Fiz no sistema os seguintes comandos

Código: Selecionar todos

   close all
   OPCAO = 0
   @ 12,25 CLEAR TO 15,69
   @ 12,25 TO 16,69 DOUBLE
   @ 13,26 SAY 'Informe a data ........:' get wdata
   clear gets
   @ 15,26 say 'Informe Unidade p/Salva:' get WDISQUE PICT '@!'
   READ
   IF LASTKEY() =   27
      close all
      return
   ENDIF
   
   ADISK = CURDRIVE()
   IF !DISKCHANGE(WDISQUE)
      @24,01 CLEAR TO 24,79
      @24,05 SAY 'Unidade Fisica para Salva Nao Disponivel'
      INKEY(0)
      Loop
   endif
   DISKCHANGE(adisk)
   if .not.empty(SgCodNota)
	wmov = substr(sgcodnota,1,4)
	WMOV = alltrim(wmov)+STRZERO(sglocatu,2,0)+SUBSTR(DTOC(WDATA),1,2)+'.ZIP'
    else  
                WMOV = 'Back'+STRZERO(sglocatu,2,0)+SUBSTR(DTOC(WDATA),1,2)+'.ZIP'
    endif
   
    run pkzip &Wmov *.dbf

   DO CASE
     CASE WDISQUE = 'A'
          run del A:&wmov
          RUN COPY &WMOV A:
     CASE WDISQUE = 'D'
          run del D:&wmov
          RUN COPY &WMOV D:
     CASE WDISQUE = 'F'
          run del F:&wmov
          RUN COPY &WMOV F:
     CASE WDISQUE = 'G'
...
esta rotina, busquei exemplos aqui no forum.
Tem como mostrar a relaçao de unidade pendentes, o usuario escolher, guardar isso numa variável e e no comando run copy informa-la?
Abracos, Laudelino.
Editado pela última vez por Toledo em 04 Jun 2010 19:11, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Busca de Unidades no Computador

Mensagem por rochinha »

Amiguinho,

Identifique o PedDrive:

Coloque um arquivo com atributo somente de leitura e faça uma verificação tipo:

Código: Selecionar todos

if file( "E:\PENDRIVE.TXT" )
   ...
if file( "F:\PENDRIVE.TXT" )
   ...
if file( "G:\PENDRIVE.TXT" )
   ...
Ou use o comando VOL do DOS para dar um nome ao PenDrive e use a função remanescente do Clipper, VOL() ou VOLUME(), se não me engano.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Busca de Unidades no Computador

Mensagem por Laudelino Scarmagnani »

Rochinha, obrigado. A busca do pendrive funcionou. Agora, o sistema gera o arquivo zipado, porem não copia. retorna a mesagem de erro. O codigo é o seguinte:

Código: Selecionar todos

if .not.empty(SgCodNota)
      wmov = substr(sgcodnota,1,4)
      WMOV = alltrim(wmov)+STRZERO(sglocatu,2,0)+SUBSTR(DTOC(WDATA),1,2)+'.ZIP'
else  
      WMOV = 'Back'+STRZERO(sglocatu,2,0)+SUBSTR(DTOC(WDATA),1,2)+'.ZIP'
endif
run pkzip &Wmov *.dbf
@24,01 CLEAR TO 24,79
@24,05 SAY 'ARQUIVO ' + Wmov + ' SERA COPIADO PARA UNIDADE ' + WDISQUE 
INKEY(0)
CDIR = WDISQUE + ':' + ALLTRIM(WMOV)
RUN DEL (CDIR)
RUN COPY (WMOV) TO (CDIR)
	
*run del &(WDISQUE):&(wmov)
*RUN COPY &(WMOV) TO &(WDISQUE): ///\&(WMOV)
   
IF !FILE(CDIR)
      @24,01 CLEAR TO 24,79
      @24,05 SAY 'ARQUIVO ' + Wmov + 'NAO COPIADO PARA ' + CDIR + ', PROVIDENCIE!'
      INKEY(0)
ENDIF
Não funcionou nem com a parte comentada com *, e não consigo captar o erro.
Laudelino.
Editado pela última vez por Toledo em 04 Jun 2010 19:10, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Busca de Unidades no Computador

Mensagem por rochinha »

Amiguinho,

Antes de:

Código: Selecionar todos

run pkzip &Wmov *.dbf
De um comando:

Código: Selecionar todos

? WMOV
e veja o conteudo, pois algum espaço ou caractere estranho pode atrapalhar o PKZIP de funcionar.

Sugiro que voce crie e .ZIP e depois copie ou crie um .BAT com o conteudo do comando e dê um RUN nele:

Código: Selecionar todos

memowrit( "ZIPA.BAT", "PKZIP "+wmov )
run ZIPA.BAT
Verifique também se o PKZIP.EXE esta na mesma pasta do seu sistema ou passe o caminho completo para o comando RUN.

Código: Selecionar todos

run c:\utilidades\pkzip\pkzip.exe &Wmov *.dbf
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Busca de Unidades no Computador

Mensagem por Laudelino Scarmagnani »

Olá pessoal, boa noite!
Seguinte, consegui fazer o BackUp dos arquivos DBF, do diretorio do sistema.
O ACBr gera uma pasta mensal no formato CCYYMM/NFE com os arquivos das NFe. Teria uma forma de o sistema, emitir um backup da pasta do mes em curso, toda vez que o usuario emite um BackUp do sistema? Como seria este comando, para montar o caminho de backup?
Laudelino.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Busca de Unidades no Computador

Mensagem por alaminojunior »

Eu uso o seguinte:

Código: Selecionar todos

Function Backup
local bTela:= savescreen(00,00,34,79), cDrive, i, cLabel, linha:= 14
clos data
hb_shadow(10,17,23,57)
criabox3dw(10,17,23,58)
hb_shadow(10,60,23,76)
criabox3dw(10,60,23,77)
@ 11,61 say padc("Unidades",15) colo "n/w"
FOR i:=1 TO 26
    cDrive := Chr(64+i) + ":\"
    cLabel := GetVolInfo( cDrive )
    IF .NOT. Empty( cLabel )
       @ linha,61 say cDrive colo "r+/w"
		 @ linha,64 say left(cLabel,14) colo "b/w"
       linha++
    ENDIF
NEXT
priv unidade:= space(1)
wvt_drawboxget(17,38,1)
@ 11,18 say padc("C¢pia de Seguran‡a",40) colo "n/w"
@ 13,22 say "Digite letra da unidade de backup" colo "b/w"
@ 17,38 get unidade colo "r/w*" pict "@!"
set conf on
read
set conf off
if lastkey() = 27 .or. !confirma()
   restscreen(00,00,34,79,bTela)
   return
endif
deletefile("&unidade:\data0001.zip")
deletefile("&unidade:\data0002.zip")
deletefile("&unidade:\data0003.zip")
@ 17,16 say padc("AGUARDE, EFETUANDO BACKUP ...",46) colo "r/w"
vNome_zip1 := "&unidade:\data0001.zip"
vNome_zip2 := "&unidade:\data0002.zip"
vNome_zip3 := "&unidade:\data0003.zip"
aDir1 := curdrive()+":\"+rtrim(curdir()) + "\*.dbf"
aDir2 := curdrive()+":\"+rtrim(curdir()) + "\pdv\*.dbf"
aDir3 := curdrive()+":\"+rtrim(curdir()) + "\sintegra\*.txt"
// arquivo final, arquivo de origem, nível, codeblock, sobreescreve, senha, lpath, ldrive,
if !hb_zipfile( vNome_zip1,adir1, 9, ,.T., "oiubiuytuyrt",.F.,.F.,)
   wvt_messagebox("Backup 1 nao foi concluido, verifique !!!","ATENCAO",48)
endif
if !hb_zipfile( vNome_zip2,adir2, 9, ,.T., "ertertrtytyn",.F.,.F.,)
   wvt_messagebox("Backup 2 nao foi concluido, verifique !!!","ATENCAO",48)
endif
if !hb_zipfile( vNome_zip3,adir3, 9, ,.T., "ioytubseawvy",.F.,.F.,)
   wvt_messagebox("Backup 3 nao foi concluido, verifique !!!","ATENCAO",48)
   rele unidade
   restscreen(00,00,34,79,bTela)
   return
endif
wvt_messagebox("BACKUP CONCLUIDO COM SUCESSO","COPIA DE SEGURANCA",48)
rele unidade
restscreen(00,00,34,79,bTela)
return
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Busca de Unidades no Computador

Mensagem por Laudelino Scarmagnani »

Boa noite.
Ao compilar, reclamou das funções
hb_zipfile()
confirma()
criabox3dw()
O que iria nas funções?
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Busca de Unidades no Computador

Mensagem por alaminojunior »

Ah sim, esquecí de comentar sobre. Mas é o seguinte:

Código: Selecionar todos

hb_zipfile()
Precisa linkar a HBZIP.LIB junto com o resto do projeto. Eu passei a utilizar esta função, no lugar do famoso PKZIP, pois aquela tela preta do DOS, convenhamos.....dá um arzinho de coisa enxertada. Em certos casos não tem como fugir, mas se temos a hb_zipfile(), façamos uso.

Código: Selecionar todos

confirma()
Esta é uma funçãozinha simples de confirmação, que retorna .t. ou .f., implemente uma que já utilize.

Código: Selecionar todos

criabox3dw()
Esta monta um box na tela, com as coordenadas. Utilize alguma que já utilize, ou use @ ..to ..

Se quiser, posso postar a minha também. Só avisar.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Busca de Unidades no Computador

Mensagem por Laudelino Scarmagnani »

Boa noite AlaminoJunior,
Consegui fazer funcionar. Vou fazer uns testes do retorno destes dados. Este utilitario é mais demorado que PKZIP? Demorou um montão aqui, se for normal, o imprtante é que é seguro e posso gerar um log com os backups feitos,e caso não o faça, me enviar um email, ou enviar ao escritório do cliente para as providencias.
Tenho alguma dificuldade em enviar email. Uso uma rotina que baixei aqui no forum. Funciona nos testes aqui em casa, mas no cliente, ainda não.
Laudelino.
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Busca de Unidades no Computador

Mensagem por Laudelino Scarmagnani »

Alamino,
Ao restaurar, pediu uma senha de encriptacao, o que é isto?
Laudelino.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Busca de Unidades no Computador

Mensagem por alaminojunior »

É a senha: reveja o exemplo.

Código: Selecionar todos

// arquivo final, arquivo de origem, nível, codeblock, sobreescreve, senha, lpath, ldrive,
if !hb_zipfile( vNome_zip1,adir1, 9, ,.T., "oiubiuytuyrt",.F.,.F.,)
Sobre o e-mail, deve ter por aí, mas segue mastigado:

Código: Selecionar todos

Function envia_email(arq) // arq é o arquivo para anexar
local cSubject  := assunto // assunto é o assunto
local        aTo:= { destino } // destino pode ser uma array com os destinatários
local cServerIp := alltrim(cdpar000->msmtp) // servidor smtp
local cFrom     := alltrim(cdpar000->muser) // remetente
local cUser     := alltrim(cdpar000->muser) // remetente
local cMsg      := obs // corpo do email
cPass           := alltrim(cdpar000->mpswd) // senha
porta           := val(cdpar000->mport) // porta usada para transmissão, geralmente a 25
pop3            := alltrim(cdpar000->mpop3) // servidor pop
aarq:= {}
aadd(aarq,arq) // note que vc pode enviar uma array com vários arquivos para anexar
if hb_SendMail(cServerIP,porta,cFrom,aTo, , , cMsg,cSubject,aarq ,cUser, cPass, pop3 ,3, .T. , .T. ,.T. , .F. )=.T.
   wvt_messagebox("E-mail enviado com sucesso.","EMAIL",48)
else
   wvt_messagebox("Falha na transmissao da mensagem, verifique.","EMAIL",48)
endif
return
Lembrando que não funciona com servidores Gmail ou Hotmail. Pelo menos ainda não conseguí.

As funções wvt_... pode trocar por alert() ou similar.

Boa sorte.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Busca de Unidades no Computador

Mensagem por lugab »

Ola pessoal,

Achei muito legal esse código q o Alamino Jr postou, mas ficou uma dúvida :

Como fazer se eu desejar zipar meus .DBF + .FPT +.CDX dentro do mesmo arquivo .ZIP , tipo, todos eles em data0001.zip, em vez de cada tipo em um zip diferente ?


A seguir o trecho do código q deve ser alterado...

Código: Selecionar todos

vNome_zip1 := "&unidade:\data0001.zip"
vNome_zip2 := "&unidade:\data0002.zip"
vNome_zip3 := "&unidade:\data0003.zip"
aDir1 := curdrive()+":\"+rtrim(curdir()) + "\*.dbf"
aDir2 := curdrive()+":\"+rtrim(curdir()) + "\*.fpt"
aDir3 := curdrive()+":\"+rtrim(curdir()) + "\*.cdx"
// arquivo final, arquivo de origem, nível, codeblock, sobreescreve, senha, lpath, ldrive,
if !hb_zipfile( vNome_zip1,adir1, 9, ,.T., "oiubiuytuyrt",.F.,.F.,)
 wvt_messagebox("Backup 1 nao foi concluido, verifique !!!","ATENCAO",48)
endif
if !hb_zipfile( vNome_zip2,adir2, 9, ,.T., "ertertrtytyn",.F.,.F.,)
 wvt_messagebox("Backup 2 nao foi concluido, verifique !!!","ATENCAO",48)
endif
if !hb_zipfile( vNome_zip3,adir3, 9, ,.T., "ioytubseawvy",.F.,.F.,)
 wvt_messagebox("Backup 3 nao foi concluido, verifique !!!","ATENCAO",48)
 rele unidade
Só pra constar, eu lembro que usando o velho PKZIP.EXE , a linha de comando pra fazer a mesma coisa seria assim:

Código: Selecionar todos

PKZIP -R -P ARQ0001  *.DBF *.FPT *.CDX
Grato,

Gabriel
lugab
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Busca de Unidades no Computador

Mensagem por Toledo »

Gabriel, tente o seguinte:

Código: Selecionar todos

vNome_zip1 := "&unidade:\data0001.zip"
aDir1 := {curdrive()+":\"+rtrim(curdir()) + "\*.dbf",;
          curdrive()+":\"+rtrim(curdir()) + "\*.fpt",;
          curdrive()+":\"+rtrim(curdir()) + "\*.cdx"}
// arquivo final, arquivo de origem, nível, codeblock, sobreescreve, senha, lpath, ldrive,
if !hb_zipfile( vNome_zip1,aDir1, 9, ,.T., "oiubiuytuyrt",.F.,.F.,)
 wvt_messagebox("Backup 1 nao foi concluido, verifique !!!","ATENCAO",48)
endif
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Busca de Unidades no Computador

Mensagem por lugab »

Toledo, necas de pitibiriba.

Não acusou nenhum erro de sintaxe no código abaixo, porém só entraram no .ZIP os tipos .DBF mesmo.

Código: Selecionar todos

aDir1 := {curdrive()+":\"+rtrim(curdir()) + "\*.dbf",;
     curdrive()+":\"+rtrim(curdir()) + "\*.fpt",;
     curdrive()+":\"+rtrim(curdir()) + "\*.cdx"}
E agora que eu reparei outra coisa que ocorre no código abaixo, desde o início dos meus testes: Mesmo gerando ZIPS em separado, os .DBF, FPT e CDX das subpastas não entraram no zip.

Código: Selecionar todos

if !hb_zipfile( vNome_zip1,aDir1, 9, ,.T., "oiubiuytuyrt",.F.,.F.,)
// arq fin, arq orig nível, codeblock, sobreescreve, senha, lpath, ldrive,
 wvt_messagebox("Backup 1 nao foi concluido, verifique !!!","ATENCAO",48)
endif
Parece q essa Hbzip.lib é limitada mesmo...

Mas mesmo assim eu aprendi mais coisas, obrigado..

Gabriel
lugab
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Busca de Unidades no Computador

Mensagem por Toledo »

Gabriel, olhando o arquivo fonte da função hb_zipfile() notei que existe um pequeno erro quando você passa uma matriz com o caminho e nome dos arquivos com caracteres coringa (? ou *). A função gera uma outra matriz com o nome de todos os arquivos que devem serem zipados, mas pega apenas o nome, desprezando o caminho onde o arquivo está. Então por este motivo o arquivo ZIP gerado pela função vem vazio.

Mas se os arquivos que você quer copiar estão na mesma pasta do seu EXE, você pode usar assim:

Código: Selecionar todos

aDir1 := {"*.DBF","*.FPT","*.CDX"}
if !hb_zipfile( vNome_zip1,aDir1, 9, ,.T., "oiubiuytuyrt",.F.,.F.,)
// arq fin, arq orig nível, codeblock, sobreescreve, senha, lpath, ldrive,
 wvt_messagebox("Backup 1 nao foi concluido, verifique !!!","ATENCAO",48)
endif
lugab escreveu:Não acusou nenhum erro de sintaxe no código abaixo, porém só entraram no .ZIP os tipos .DBF mesmo.
Gabriel, provavelmente o arquivo ZIP já existia e já tinha os arquivos .DBF. Mas como expliquei acima, o arquivo gerado fica sempre vazio.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder