Como achar um arquivo no computador

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

Moderador: Moderadores

Avatar do usuário
helio
Usuário Nível 3
Usuário Nível 3
Mensagens: 175
Registrado em: 04 Ago 2004 10:36
Localização: São Bento do Una-PE
Contato:

Como achar um arquivo no computador

Mensagem por helio »

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 do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Como achar um arquivo no computador

Mensagem por Jairo Maia »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como achar um arquivo no computador

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Como achar um arquivo no computador

Mensagem por alxsts »

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)
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Como achar um arquivo no computador

Mensagem por Eolo »

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 do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como achar um arquivo no computador

Mensagem por Pablo César »

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 do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Como achar um arquivo no computador

Mensagem por Eolo »

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 do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como achar um arquivo no computador

Mensagem por Pablo César »

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:

Código: Selecionar todos

#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 335 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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como achar um arquivo no computador

Mensagem por JoséQuintas »

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:

Código: Selecionar todos

PROCEDURE Main
   ? time()
   aDir := DirectoryRecurse( "d:\inetpub\wwwroot\xmlpdf\*.xml" )
   ? Len( aDir )
   ? time()
   RETURN
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Como achar um arquivo no computador

Mensagem por Itamar M. Lins Jr. »

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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
helio
Usuário Nível 3
Usuário Nível 3
Mensagens: 175
Registrado em: 04 Ago 2004 10:36
Localização: São Bento do Una-PE
Contato:

Como achar um arquivo no computador

Mensagem por helio »

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
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Como achar um arquivo no computador

Mensagem por Kapiaba »

Olá, veja o comando:

Código: Selecionar todos

   hb_FNameSplit()
É muito mais rápido que o Anterior.

abs.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Como achar um arquivo no computador

Mensagem por Jairo Maia »

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):

Código: Selecionar todos

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)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Como achar um arquivo no computador

Mensagem por Kapiaba »

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

Código: Selecionar todos

#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.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Como achar um arquivo no computador

Mensagem por Eolo »

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.
Responder