FileExists não localiza arquivo existente na pasta no micro do cliente ( mas em meu micro localiza )

21/12/2015

3

Prezados

Tenho uma rotina que me devolve a quantidade de arquivos existentes em uma determinada pasta.

Ela em meu micro funciona perfeitamente, porém, executando a mesma rotina em outro micro ele me retorna 0 como quantidade de arquivos.

Ex.: Descompacto um arquivo ZIP e ele cria uma pasta. No sistema, aponto o SelectDirectory para a tal pasta, pego o caminho e passo a extensão do(s) arquivo(s) a ser(em) procurado(s) pra rotina


FindFirst(E_PASTA.Text + '\*.SGD', faAnyFile, SearchRec);
  repeat
  begin
    M_LOG.Lines.Add(E_PASTA.Text + '\' + SearchRec.Name);
    if FileExists(E_PASTA.Text + '\' + SearchRec.Name) then
      qtdImagens := qtdImagens + 1;
  end
  until FindNext(SearchRec) <> 0;
  L_PASTA.Caption := 'Pasta contendo: ' + IntToStr(qtdImagens) + ' imagens';



Veja que a rotina, escreve o nome do arquivo SGD no LOG, e depois se certifica se o arquivo existe (redundante isso).

Em meu micro ele escreve o caminho completo de todos os arquivos e informa o total em tela

No micro do cliente ele também cria a lista contendo todas as imagens, mas o comando FileExists sempre devolve 0 imagens

Já copiei o caminho dos arquivos existentes no log e colei no windows explorer. O caminho + arquivo existente localiza e abre o arquivo, mas o delphi diz não encontrá-lo.

O que pode ser isso?
Responder

Posts

Olá,
Eu passei por isso, e parece que os arquivos descompactados são marcados com alguma propriedade que o FileExist não consegue encontra-lo. Mas depois de um tempo ele passa a ser encontrado.

Internamente na função FileExists ela tem dois ifs que verifica se pode ou não analizar o arquivo:

Flags := GetFileAttributes(PChar(FileName));

  if Flags <> INVALID_FILE_ATTRIBUTES then


e depois

if faSymLink and Flags <> 0 then



neste ponto do código os arquivos extraídos do zip ficam de fora.


A solução que eu encontrei foi com as novas bibliotecas de manipulação de arquivos do Delphi 2010 (ou superior) usando a biblioteca System.IOUtils na uses, (se bem que em alguns raros momentos falhou da mesma forma.

Ela tem várias classes com métodos abstratos que pegam informações de quase tudo que envolve diretórios e arquivos.

Eu então uso TFile.Exists('caminho do arquivo') para encontrar se um caminho existe;

Mas vale apenas olhar as demais funções desta biblioteca por exemplo TDirectory.CreateDirectory() para criar um diretório ou TPath.GetTempPath para descobrir qual a pasta de arquivos temporários do sistema (independentemente de plataforma)
Responder