Unzap a um DBF
Moderador: Moderadores
Unzap a um DBF
Bem Hajam a todos os amigos do forum.
Eu quando era mais novo sei que havia um utilitário do norton utilities que fazia o unzap de um arquivo "zapado".
Quando se faz um zap ao arquivo pode-se recuperá-lo. Alguém me pode dar a dica onde encontro este utilitário.
Saudações amigas a todos
Carlos Lapa
Eu quando era mais novo sei que havia um utilitário do norton utilities que fazia o unzap de um arquivo "zapado".
Quando se faz um zap ao arquivo pode-se recuperá-lo. Alguém me pode dar a dica onde encontro este utilitário.
Saudações amigas a todos
Carlos Lapa
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Obrigado Carlos e muito própero ano novo para você e os seus !lapinha escreveu:Bem Hajam a todos os amigos do forum.
Não creio colega, que encontres algum utilitário que dê para fazer UN-ZAP num arquivo DBF após de ter dado um ZAP no Clipper. Ao menos que antes tenha sido feito um arquivo backup. eu desconheço isso.
Editado pela última vez por Pablo César em 07 Jan 2008 22:35, em um total de 1 vez.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Como eu disse, em Clipper não creio que encontres algo. Mas pesquisando na NET encontrei o seguinte código feito em VP:
Tentei reproduzir isto em puro Clipper, mas fico devendo porque não sei nada de VP. E esbarro na função FCHSIZE() que é caracteristico do VP, veja o que eu encontrei sobre esta função:
"http://msdn2.microsoft.com/en-us/librar ... S.80).aspx" (cole este link no seu navegador)
http://portal.dfpug.de/dfpug/Dokumente/ ... ChSize.doc
Pelo que tenho lido, após um ZAP se não houver ESCRITA ALGUMA no seu HD, existe alguma chance de recuperar o arquivo, pois quando é feito um ZAP este é criado um arquivo DBF sem registros com o mesmo nome e deletado o DBF original. agora se tiver algum colega que possa compilar este código em VP e testar, quem sabe possa disponibilizar o aplicativo para todos nós...
Código: Selecionar todos
FUNCTION UNZAP
PARAMETER Y
IF Y>0 .AND. USED()
IF RECCOUNT()=0
FILENAME=DBF()
USE
HANDLE=FOPEN(FILENAME,2)
IF HANDLE>0
BYTE=FREAD(HANDLE,32)
BKUP_BYTE=BYTE
FIELD_SIZE=ASC(SUBSTR(BYTE,11,1))+(ASC(SUBSTR(BYTE,12,1))*256)
FILE_SIZE=FSEEK(HANDLE,0,2)
BYTE8=CHR(INT(Y/(256*256*256)))
BYTE7=CHR(INT(Y/(256*256)))
BYTE6=CHR(INT(Y/256))
BYTE5=CHR(MOD(Y,256))
BYTE=SUBSTR(BYTE,1,4)+BYTE5+BYTE6+BYTE7+BYTE8+SUBSTR(BYTE,9)
=FSEEK(HANDLE,0)
=FWRITE(HANDLE,BYTE)
=FCHSIZE(HANDLE,FILE_SIZE+(FIELD_SIZE*Y))
=FCLOSE(HANDLE)
ENDIF
USE &FILENAME
ENDIF
ENDIF
Uso:
ZAP
=UNZAP(47) && recupera 47 registros"http://msdn2.microsoft.com/en-us/librar ... S.80).aspx" (cole este link no seu navegador)
http://portal.dfpug.de/dfpug/Dokumente/ ... ChSize.doc
Pelo que tenho lido, após um ZAP se não houver ESCRITA ALGUMA no seu HD, existe alguma chance de recuperar o arquivo, pois quando é feito um ZAP este é criado um arquivo DBF sem registros com o mesmo nome e deletado o DBF original. agora se tiver algum colega que possa compilar este código em VP e testar, quem sabe possa disponibilizar o aplicativo para todos nós...
Editado pela última vez por Pablo César em 16 Abr 2008 12:21, em um total de 1 vez.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Não sei com relação às diversas versões do Windows, mas em DOS, ao descartar uma porção de memória em disco (ZAP), o espaço desalocado não é utilizado de imediato por nenhum outro arquivo. É uma estratégia de alocação (configurável atrás de um serviço do DOS) que permite a recuperação de arquivos apagados.Como eu disse, em Clipper não creio que encontres algo. Mas pesquisando na NET encontrei o seguinte código feito em VP:
Mas ao realocar espaço, mesmo que seja para o mesmo arquivo, o DOS não utiliza o espaço que acabou de ser descartado. Ele busca espaço numa área livre. O que foi descartado só seria reaproveitado se houvesse a recuperação de um arquivo apagado, o que não é o caso. Aqui se descarta parte do arquivo e faz-se uma nova alocação com a função fchsize do VFP que, provavelmente, é derivada da função chsize da API do Windows.
Esta função é como uma sanfona. Ela aumenta ou diminui o tamanho de um arquivo. É uma função fortemente ligada ao sistema operacional. Por isso, em C não é uma função aceita pelo padrão ANSI, por quê ela depende da implementação do SO.
Se fosse pra fazer algo que realmente funcionasse certinho, eu acho que o correto seria recorrer à tabela de alocação de arquivos pra recuperar a porção que foi descartada. Como isso iria requerer acesso em baixo nível, é fácil perceber que a coisa seria meio complicada.
Como eu já disse, não sei se isso funcionaria no Windows. A chave do sucesso está na função fchsize(). Ela é o coração deste recurso. Sinceramente, não consigo imaginar porque funcionaria, se ela apenas aloca ou desaloca espaço, usando um recurso simples do SO.
Mas é o caso de alguém testar e ver se dá mesmo. Nem precisaria ser em VFP. Poderia ser em outra linguagem qualquer que tenha acesso à essa função chave.
[]'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!
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!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Carlos, permita-me fazer uma perguntinha... em quê situação você precisa disso ? Isto é uma coisa que ocorreu agora acidentalmente e deseja recuperar (que acho dificil agora depois de tanto que se passou...) ou seria para alguma rotina de manutenção para arquivamento de dados ? Porque conforme for, acho que tem diversas formas de evitar o ZAP, ora porque no seria conveniente o uso desse comando quando está em rede. Isso claro, depende do tratamento e finalidade que se dê ao ZAP.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Grande Lapinha! Como vai Silves??
Cara, se eu fosse você, desistia de tentar fazer a recuperação. Há uma série de programas que dizem fazer isso (recuperação de dados apagados), mas nenhum deles garante 100%. O que você talvez vai conseguir, depois de muito trabalho e algum custo, vão ser somente "fragmentos" de informações, que não vão valer muito.
Um caso real: há uns 2 meses, um colega nosso apagou sem querer a pasta onde estavam os seus programas e o backup deu erro. Bem, eu e mais uns 15 amigos montamos uma força-tarefa para o ajudar, levantamos (acho que) todos os programas de recuperação disponíveis, tentamos uma série de providências, mas o resultado foi quase zero: só conseguimos fragmentos dos arquivos deletados e, no fim, o tal colega acabou tendo que refazer todos os programas...
No tempo do DOS e PCTools a coisa era mais fácil, eu mesmo recuperei muita coisa com o Norton. Mas sob o Windows? Eu nem tento. Aliás, não estou dizendo pra você não tentar! Se as informações são vitais para você, talvez valha a pena. Mas não espere muito.
Grande abraço, meu amigo.
Cara, se eu fosse você, desistia de tentar fazer a recuperação. Há uma série de programas que dizem fazer isso (recuperação de dados apagados), mas nenhum deles garante 100%. O que você talvez vai conseguir, depois de muito trabalho e algum custo, vão ser somente "fragmentos" de informações, que não vão valer muito.
Um caso real: há uns 2 meses, um colega nosso apagou sem querer a pasta onde estavam os seus programas e o backup deu erro. Bem, eu e mais uns 15 amigos montamos uma força-tarefa para o ajudar, levantamos (acho que) todos os programas de recuperação disponíveis, tentamos uma série de providências, mas o resultado foi quase zero: só conseguimos fragmentos dos arquivos deletados e, no fim, o tal colega acabou tendo que refazer todos os programas...
No tempo do DOS e PCTools a coisa era mais fácil, eu mesmo recuperei muita coisa com o Norton. Mas sob o Windows? Eu nem tento. Aliás, não estou dizendo pra você não tentar! Se as informações são vitais para você, talvez valha a pena. Mas não espere muito.
Grande abraço, meu amigo.
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Pessoal... confesso que lí muito rapidamente os posts acima mas, pelo que eu entendi o que o colega quer é recuperar "registros" de um DBF que sofreu um ZAP e não recuperar um arquivo DBF deletado do HD ou pasta... logo as supostas soluções apresentadas, com exceção do código em VP disponibilizado pelo Pablo foram equivocadas...
Me perdoem se eu estiver errado...
Por outro lado, até onde eu saiba, não há como recuperar "registros" após o zap....
Me perdoem se eu estiver errado...
Por outro lado, até onde eu saiba, não há como recuperar "registros" após o zap....
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
O software dSalvage, indicado pelo Pablo, promete justamente recuperar registros de um arquivo que sofreu um ZAP. Só que não há versão demo e ele custa US$245, sem qualquer chance de reembolso caso o programa não cumpra o que promete. Não me soa muito bem, apesar de que o programa também se preste a outros serviços de manutenção.
Mas, enfim, no meu post tentei entender como isso poderia ser feito. Não creio que seja possível. Só testando o código VFP postado pelo Pablo ou convertendo-o pra C ou mesmo XHarbour, já que a função "chave" do programa existe na API do Windows.
Mas, enfim, no meu post tentei entender como isso poderia ser feito. Não creio que seja possível. Só testando o código VFP postado pelo Pablo ou convertendo-o pra C ou mesmo XHarbour, já que a função "chave" do programa existe na API do Windows.
[]'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!
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!
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinhos
O conjunto de funções de baixo nivel Fblablabla não possui uma função FSIZE()?
O conjunto de funções de baixo nivel Fblablabla não possui uma função FSIZE()?
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Não em Clipper, Rochinha. E a função em questão é fchsize() e que eu saiba não existe pois não está documentada e acusa falta dela na compilação. Você tem VFP para testar esse código que eu postei ? (ou terei que esperar um tempão... hihih isso é uma brincadeirinha por causa do outro tópico sobre o MERGE) mas sei que você está muito ocupado e também não é obrigado a estar me atendendo... não é ?. Mas seria bom alguém que tenha Visual FoxPro que compilassem e dessem uma opinião (ja pedí para outros colegas que sei que tem, mas ainda não leram o meu MP).
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Na relação de funções de baixo (mais baixo) nível para tratamento de arquivos no Clipper, não contém qualquer função de ajuste de tamanho de arquivo. FSize() não existe na biblioteca padrão do Clipper. Mas seria apenas para obter o tamanho do arquivo, a julgar pelo nome. Aliás, nem precisa existir, já que se pode usar FileSeek(<handle>,0,FS_END), que produz o mesmo efeito.
[]'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!
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!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Ok Maligno se a função FileSeek(<handle>,0,FS_END) aparentemente faria o mesmo. A questão não afetaria o disposicionamento do ponteiro nesse exemplo que postei ?. Na verdade, não boto muita fé nesse código, não creio que ampliando o tamanho do atual zapado com simplesmente mudar o ponteiro... será ?
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Não. Veja bem: eu disse que esse uso de FileSeek() faria o mesmo que um FSize(), que o Clipper não tem. Foi apenas um comentário sobre o que o Rochinha falou.
A questão do conteúdo ser recuperado apenas com o aumento do arquivo (é a única coisa que chSize() faz) ainda é uma incógnita. Ninguém testou.
Uma crítica construtiva: não use ou relacione o termo ponteiro com o tamanho de um arquivo. Ponteiro serve apenas para indicar uma determinada posição de memória ou, conforme o nosso caso aqui, onde ocorrerá o próximo acesso a um arquivo (é a finalidade da FSeek(), que muda o ponteiro do arquivo).
A questão do conteúdo ser recuperado apenas com o aumento do arquivo (é a única coisa que chSize() faz) ainda é uma incógnita. Ninguém testou.
Uma crítica construtiva: não use ou relacione o termo ponteiro com o tamanho de um arquivo. Ponteiro serve apenas para indicar uma determinada posição de memória ou, conforme o nosso caso aqui, onde ocorrerá o próximo acesso a um arquivo (é a finalidade da FSeek(), que muda o ponteiro do arquivo).
[]'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!
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!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Mas absolutamente que não, não foi isso que eu disse. justamente para "ampliar" o tamanho do arquivo ZAPado, teria que disposicionar o ponteiro também. Não achas que é assim ?. Me refiro nesse exemplo que postei (em VFP).Maligno escreveu:Uma crítica construtiva: não use ou relacione o termo ponteiro com o tamanho de um arquivo.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.


