Como localizar um arquivo informado

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Como localizar um arquivo informado

Mensagem por porter »

Olá pessoal,
Existe algum comando no Harbour 3.2.0dev para procurar um arquivo em uma determinada pasta ?
Gostaria de informar por Exemplo "11402", se esse numero estiver contido no código chave,
atribuir o código inteiro para uma variável.


c:\AcbrMonitorPlus\Arqs\Retorno\35170108050974000196550010000114021000114020.xml

Harbour 3.2.0dev (console)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Como localizar um arquivo informado

Mensagem por Kapiaba »

Fácil:

Código: Selecionar todos

      // PEGA O .PDF DO DANFE GERADA PELO UNIDANFE.EXE
      cPdfNfeUni := aFindFile( ALLTRIM( cCHAVE ) + "-danfe.pdf", ;
                               cDirExe+"unidanfe\email\anexos" )

      // Exemplo
      // aDir := aFindFile("23120711522734000157550010000000061000000060_10-cce.pdf", "c:\INST_NFE\unidanfe\email\anexos\" )

      IF .NOT. EMPTY( cPdfNFeUni )

         cArq3 := cPdfNFeUni[1]

         cPdfNfeUni := ALLTRIM( cArq3 )

      ELSE

         cPdfNFeUni := ""   // Para nao quebrar o envio de email

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

         cPath := cDirExe+"UNIDANFE\EMAIL\ANEXOS\"

         //cFile := cChave+"-danfe.pdf"  // exemplo
         cFile := ALLTRIM( cCHAVE ) + "-danfe.pdf"

         // Isto funciona na minha versao 2.7 superiores e RECURSIVE
         aFile := DIRECTORYRECURSE( cPath + cFile )

         If Len(aFile)==0

            //? "Arquivo do DANFE Não Encontrado"
            cPdfNFeUni := ""

         Else

            For nI := 1 to Len( aFile )

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

               //? cPath+" "+cArq+" "+cExt+" Perfeito Emotta!"

            Next

            aFiles := ALLTRIM( cPath+cArq+cExt )

            cPdfNFeUni := aFiles

         EndIf

      ENDIF
Abs.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como localizar um arquivo informado

Mensagem por JoséQuintas »

Pelo que entendi, sabe a pasta, mas não sabe o nome do arquivo.

Código: Selecionar todos

aFleList := Directory( "*11402*.xml" )
Mas o melhor seria colocar exatamente na posição do número, porque pode coincidir muita coisa, principalmente se fosse a nota número 1.
E pode ter emissão, cancelamento, carta de correção, NFE, CTE, MDFE, etc, com mesmo número.
Quanto mais detalhes da chave, mais chance de pegar o que realmente quer.
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como localizar um arquivo informado

Mensagem por Toledo »

JoséQuintas escreveu:aFleList := Directory( "*11402*.xml" )
Não testei, mas será que isto não dá certo:

Código: Selecionar todos

aFleList := Directory( "*11402?-nfe.xml" )

ou

aFleList := Directory( "*11402?.xml" )
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
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Como localizar um arquivo informado

Mensagem por porter »

Testei essas 3 formas, mas todas elas, traz como resultado todos os arquivos da pasta informada,
elas não trazem, como no exemplo somente o arquivo que contenha "12334"

Código: Selecionar todos


aFileList := Directory( cPastaFiles, "*12334*.xml" )
aFileList := Directory( cPastaFiles, "*12334?-nfe.xml" )
aFileList := Directory( cPastaFiles, "*12334?.xml" )

IF LEN(aFileList) > 0
    xChave := LEFT(aFileList[1,1],44)
ENDIF



Harbour 3.2.0dev (console)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como localizar um arquivo informado

Mensagem por Toledo »

Amigo, seu código está errado. Teste este:

Código: Selecionar todos

PROCEDURE Main
      LOCAL aFiles

      aFiles := Directory( "*12334?-nfe.xml" )  //ou Directory( "*12334?.xml" )
      AEval( aFiles, {|a| QOut( a[1] ) } )

RETURN
Testei aqui e funcionou certinho.

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

Como localizar um arquivo informado

Mensagem por Jairo Maia »

Olá Pessoal,

Da forma que o Toledo fez funciona corretamente, porém somente na pasta local. Se desejar pesquisar em outra pasta, precisa colocar a pasta e a máscara como um único parâmetro. Se usar 2 parâmetros falha, exemplo:

Código: Selecionar todos

aFileList := Directory( cPastaFiles + "*12334*.xml" )
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Como localizar um arquivo informado

Mensagem por porter »

precisa colocar a pasta e a máscara como um único parâmetro.
Realmente, eu cometi esse erro.
E pode ter emissão, cancelamento, carta de correção, NFE, CTE, MDFE, etc, com mesmo número.
Quanto mais detalhes da chave, mais chance de pegar o que realmente quer.
No caso de Carta de Correção e Cancelamento, é o mesmo numero, mas estão em pastas
diferentes, por exemplo:
Carta de Correção está em Evento/CCe
Cancelamento está em Evento/Cancelamento
Responder