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: 1058
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: 1914
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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 1058
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: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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