Clipper On Line • Ver Tópico - Como achar um arquivo no computador

Como achar um arquivo no computador

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

Moderador: Moderadores

 

Como achar um arquivo no computador

Mensagempor helio » 02 Jan 2015 15:08

Pessoal,

Tem como procurar um arquivos em todas as pasta do computador como no antigo DOS exemplo: dir arquivo.txt /s
Helio Beltrao Jr.
msn: helio@htisistemas.com
Avatar de usuário

helio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 175
Data de registro: 04 Ago 2004 10:36
Cidade/Estado: São Bento do Una-PE
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Como achar um arquivo no computador

Mensagempor Jairo Maia » 02 Jan 2015 18:09

Olá Hélio,

Claro! No XP basta usar a opção Pesquisar no botão INICIAR e configurar a pesquisa como desejar. No Seven basta clicar no botão INICIAR e digitar o que deseja procurar na caixa Pesquisar programas e arquivos
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Como achar um arquivo no computador

Mensagempor JoséQuintas » 02 Jan 2015 20:13

Se for o que parece, seria mais rápido e prático ter digitado o comando e saber que funciona do mesmo jeito.

Se for alternativa pra isso, no XP já foi feita.

E se for no WIndows 7, é só digitar lá encima à direita, quando abrir uma pasta.

Pessoalmente continuo preferindo o comando no prompt, é muito mais rápido.

E dependendo, melhor acrescentar mais parâmetros:

dir /s /b /p

/s - subdiretórios recursivamente
/b - mostra path + nome do arquivo, facilita enxergar localização
/p - com pausa, caso tenham muitos arquivos
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18155
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Como achar um arquivo no computador

Mensagempor alxsts » 02 Jan 2015 22:39

Olá!

Penso que o colega não esteja com esta dúvida tão básica... creio que o que ele pretende é fazer isto programaticamente, via Harbour.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Como achar um arquivo no computador

Mensagempor Eolo » 03 Jan 2015 19:31

arq:=DirectoryRecurse()

É similar a Directory(), só que considera sub-pastas.

A saída (ARQ) é uma matriz de "n" linhas (quantos forem os arquivos encontrados) e 5 colunas (nome, tamanho, data, hora e atributo). Se não for encontrado nenhum arquivo, ARQ será uma matriz vazia.

NOME contém o nome e o caminho do arquivo: "c:\pasta\pasta1\arq1.prg"

Exemplos:

arq := DirectoryRecurse("*.*")
Retorna todos os arquivos da pasta atual, incluindo os arquivos de subpastas existentes.

arq := DirectoryRecurse("*.prg")
Igual acima, mas só os arquivos de extensão PRG.

arq := DirectoryRecurse("c:\pasta1\pasta2\pr*.*")
Retorna todos os arquivos iniciados com "pr" da pasta "c:\pasta1\pasta2", incluindo os arquivos de subpastas existentes (sob pasta2).
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Como achar um arquivo no computador

Mensagempor Pablo César » 04 Jan 2015 15:26

Obrigado Eolo, eu não conhecia essa função DirectoryRecurse(). Ela vem do xHarbour. Eu testei e ficou extremamente pesada. E em alguma vezes falou.
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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Como achar um arquivo no computador

Mensagempor Eolo » 04 Jan 2015 17:43

Eu testei e ficou extremamente pesada. E em alguma vezes falou.


Acho que sua observação ficou vaga e não dá pra concluir se vc acha que a função deve ser usada ou não.

Vc poderia postar como fez o teste (que demonstra a lentidão) e esclarecer no que a função falhou?
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Como achar um arquivo no computador

Mensagempor Pablo César » 04 Jan 2015 21:09

O meu comentário coincide com muitos outros feitos em outros fóruns que pesquisei na internet.

A conclusão de ser usada ou não vai de cada um, se quer adotar ou não.
Eu não estou te criticando por ter indicado algo (até agradeci por ter compartilhado), apenas relatando o que eu achei dessa "nova" função (nova pra mim). Então tomar uma decisão por causa do meu comentário, pode ser relativo.

O teste que eu fiz foi este:
#include <hmg.ch>

Function Main()
Local aFiles:=DirectoryRecurse( "C:\Fontes\HMG\*.prg" )

MsgDebug(aFiles)
// MsgList(aFiles)
Return Nil

Talvez seja pela enorme quantidade de arquivos.

Screen4.png

Pode ser que a função tenha alguma limitação, porque após vários segundos de execução (monitorado pelo gerenciador de tarefas do SO), não veio valor algum.

Também testei com este código: aFiles:=DirectoryRecurse( "C:\windows\*" ) e levou mais de 4 minutos para exibir na tela, mas cansei e ainda está rodando...

Adicionei o executável.
Anexos
Demo2.rar
(1.06 MiB) Baixado 136 vezes
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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Como achar um arquivo no computador

Mensagempor JoséQuintas » 04 Jan 2015 22:18

Fiz um teste aqui.
O resultado, ao fazer duas vezes em seguida é interessante.
mais de 3 minutos na primeira vez, e 5 segundos na segunda vez, pra 241.383 arquivos de resultado.

D:\>test
23:13:15
241383
23:16:51

D:\>test
23:16:55
241383
23:17:00

o fonte foi este:
PROCEDURE Main
   ? time()
   aDir := DirectoryRecurse( "d:\inetpub\wwwroot\xmlpdf\*.xml" )
   ? Len( aDir )
   ? time()
   RETURN
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18155
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Como achar um arquivo no computador

Mensagempor Itamar M. Lins Jr. » 04 Jan 2015 22:46

Ola!
No xHb tem bug. No Harbour teve mudanças, mas pela data talvez no xHb já corrigiram tbm.

2008-07-25 15:24 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/xhb/Makefile
* harbour/contrib/xhb/common.mak
+ harbour/contrib/xhb/dirrec.prg
+ added DirectoryRecurse() function. It's not exactly xHarbour
compatible as I wanted at the beginning. But when I begin
to carefully check what xHarbour exactly does then I dropped
the strict compatibility due to problems with xHarbour
implementation which have to be fixed. I left this note in the
dirrec.prg header:
This implementation uses different rules then xHarbour one.
It does not change current drive or current directory so
unlike the xHarbour version it's MT safe.
It also returns relative paths which are more similar to
DIRECTORY() function results so they can be easy used
directly in other code, f.e. to create archive without
absolute paths. Please note that user can easy convert
relative paths to absolte ones by simple adding curdir()
and/or cPath parameter passed to DirectoryRecurse() but
reverted conversion may not be possible in some cases.
The 3-rd xHarbour parameter <lCaseMach> is ignored because
harbour uses platform native rules to check filename mask
respecting SET FILECASE and SET DIRCASE settings.
xHarbour does not add "D" to attribute list used for directory
tree scanning so user always have to add it manually and later
it ignores it so it's not possible to extract file list with
directories entries. In Harbour it's fixed.


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6952
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Como achar um arquivo no computador

Mensagempor helio » 05 Jan 2015 09:26

Bom dia,

Pessoal o que estava querendo dizer e no modo de programacao XHARBOUR e vi alguns exemplos mais gostaria de saber era o seguinte uma pessoa baixa um arquivo de um email ai gostaria de pesquisa em todo o HD para pegar este arquivo sem saber onde foi baixado tem como ?
Helio Beltrao Jr.
msn: helio@htisistemas.com
Avatar de usuário

helio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 175
Data de registro: 04 Ago 2004 10:36
Cidade/Estado: São Bento do Una-PE
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Como achar um arquivo no computador

Mensagempor Kapiaba » 05 Jan 2015 12:22

Olá, veja o comando:

   hb_FNameSplit()


É muito mais rápido que o Anterior.

abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1766
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 311 vezes
Mens.Curtidas: 119 vezes

Como achar um arquivo no computador

Mensagempor Jairo Maia » 05 Jan 2015 13:11

Olá Pessoal,

Creio que para procurar um arquivo em toda a unidade não há mesmo uma forma rápida de faze-lo. Penso também que a melhor e mais rápida forma seria usar a sugestão do José, e direcionando o resultado para um arquivo. Exemplo (xHarbour):
Run Dir \Clientes.Prg /S /B > Result.Tmp

Depois trazer à memória o arquivo Result.Tmp e verificar se o arquivo foi encontrado, e se sim tratar a ação. Mesmo assim, pode ser encontrado mais de um arquivo com mesmo nome.

Kapiaba, Creio que essa função não atende a necessidade do autor do tópico, porque não tem como varrer o disco todo. Outrossim, como funciona essas funções? Você tem algum exemplo prático? Veja a sintaxe aqui: https://vivaclipper.wordpress.com/tag/curdrive/
Eu particularmente nunca entendi como usar nenhuma delas. Sempre retorna resultados estranhos...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Como achar um arquivo no computador

Mensagempor Kapiaba » 05 Jan 2015 14:06

Boa tarde Jairo, veja se ajuda, aqui funciona perfeito.

#include "FiveWin.ch"  // basta comentar para modo console

FUNCTION Main()

   LOCAL cArq, cExt, cPath, cFile, cEncontrou, nI

   cArq  := ""
   cExt  := ""
   cPath := ""

   cPath := "C:\FWH1306\SAMPLES\"

   cFile := "TESTE.PRG"

   // aFile := DIRECTORYRECURSE( cPath + cFile )

   // ou:

   aFile := DIRECTORY( cPath + cFile )

   If Len(aFile)==0

      ? "Arquivo Não Encontrado"

   Else

      For nI := 1 to Len( aFile )

         hb_FNameSplit( aFile[nI,1], @cPath, @cArq, @cExt )

         ? cPath+" "+cArq+" "+cExt+" Perfeito, encontrou!"

      Next

      aFiles := ALLTRIM( cPath+cArq+cExt )

      cEncontrou := aFiles

      IF FILE( cEncontrou )  // Encontrou, mostra...

         ? cEncontrou

      ENDIF

   EndIf

RETURN NIL


Abs.

Kapiaba
Colaborador

Colaborador
 
Mensagens: 1766
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 311 vezes
Mens.Curtidas: 119 vezes

Como achar um arquivo no computador

Mensagempor Eolo » 05 Jan 2015 15:00

Pessoal o que estava querendo dizer e no modo de programacao XHARBOUR e vi alguns exemplos mais gostaria de saber era o seguinte uma pessoa baixa um arquivo de um email ai gostaria de pesquisa em todo o HD para pegar este arquivo sem saber onde foi baixado tem como ?


Bão, vou ser, de novo, o "chato".

Está-se discutindo performance desta e daquela função, dentro de um SISTEMA, mas vou parar pra questionar a UTILIDADE da solução do problema, programaticamente.

"O usuário baixa um arquivo do e-mail, não sabe onde salvou e depois o SISTEMA da empresa tem que procurar o arquivo?". Hã? Como assim?

Algo como "O filho do usuário quer saber onde o Governor of Poler 2 salva os arquivos, aí o cliente acessa o sistema da empresa e acha os arquivos?". Hã?

A pergunta inicial do Helio até poderia ter algum sentido, tanto que respondi. Mas depois deste último post dele, sei não. Imagino o financeiro, debruçado sobre o Contas a Pagar, tendo que parar porque o presidente da empresa quer saber onde o Gamão do Windows 7 salvou os scores dele...

Pra mim não faz sentido.
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro