Leitura de Arquivos em Diretorio

Delphi

06/06/2003

Bom Dia a Todos.
Estou precisando desenvolver um programa para abrir todos as arquivos .INI em um determinado diretorio, e pegar um determinado valor dentro deste .INI, não estou conseguindo colocar o codigo para saber quantos arquivos eu tenho dentro deste diretorio e fazer com que o programa pegue o primeiro, abra-o e leia o conteudo e depois vai fazendo até o ultimo arquivo.

Grato. :cry:


Ericfp

Ericfp

Curtidas 0

Respostas

Jairroberto

Jairroberto

06/06/2003

Olá, amigo!

Criei uma rotina para listar arquivos em um objeto TStrings:

{
  Lista os arquivos onde:
  Mascara = relação de caminhos e curingas separados por ponto e vírgula.
  Ex.: ´C:\Teste\*.txt;C:\Outro\*.dat´
}
function ListarArquivos(const Mascara: string; Lista: TStrings; const IncluirCaminho, IncluirDiretorios, IncluirPontos: Boolean): Integer;
var
  i: Integer;
  s: string;

  procedure ListarArquivosPath(const Mascara: string; Lista: TStrings; const IncluirCaminho, IncluirDiretorios, IncluirPontos: Boolean);
  var
    DirInfo: TSearchRec;
    i: Integer;
  begin
    i := FindFirst(Mascara, faAnyFile, DirInfo);
    while i = 0 do
    begin
      if (IncluirDiretorios or ((DirInfo.Attr and faDirectory) <> faDirectory))
         and (IncluirPontos or ((DirInfo.Name <> ´.´) and (DirInfo.Name <> ´..´)))
         and ((DirInfo.Attr and faVolumeID) <> faVolumeID)
      then
        if IncluirCaminho then
          Lista.Add(ExtractFilePath(Mascara) + DirInfo.Name)
        else
          Lista.Add(DirInfo.Name);
      i := FindNext(DirInfo);
    end;
    SysUtils.FindClose(DirInfo);
  end;

begin
  Result := Lista.Count;

  if Pos(´;´, Mascara) = 0 then
    ListarArquivosPath(Mascara, Lista, IncluirCaminho, IncluirDiretorios, IncluirPontos)
  else
    for i := 1 to Length(Mascara) do
    begin
      if Mascara[i] <> ´;´ then
        s := s + Mascara[i];
      if (Mascara[i] = ´;´) or (i = Length(Mascara)) then
      begin
        ListarArquivosPath(s, Lista, IncluirCaminho, IncluirDiretorios, IncluirPontos);
        s := ´´;
      end;
    end;

  Result := Lista.Count - Result;
end;


Você deve chamar a função da seguinte forma:

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
  i: Integer;
begin
  sl := TStringList.Create;
  try
    if ListarArquivos(´C:\Windows\*.ini´, sl, True) > 0 then
      for i := 0 to Pred(sl.Count) do
      begin
        // Processa cada arquivo encontrado
      end;
  finally
    sl.Free;
  end;
end;



Um abraço,
Jair


GOSTEI 0
Ericfp

Ericfp

06/06/2003

Obrigado Jair. :lol:

Não sei o que está errado, mas esta apresentando a seguinte mensagem quando compilado

NO ENOUGH ACTUAL PARAMETERS.

poderia me ajudar mais uma vez.

Grato.


GOSTEI 0
Ericfp

Ericfp

06/06/2003

Outra coisa.
Não estou conseguindo pegar o nome do arquivo que esta sendo lido no FOR DO.

Grato.
:o


GOSTEI 0
Ericfp

Ericfp

06/06/2003

Obrigado.
A todas as 15 pessoas que pelo menos leram a minha solicitação; obrigado principalmente ao Sr. Jair, por ter enviado a resposta com tanta urgencia.
Consegui resolver as minhas outras perguntas, e importar os dados a qual necessitava.

Obrigado a Todos.

´Que essa comunidade Delphi nunca tenha um fim, e sim sempre um começo´

8)


GOSTEI 0
Jairroberto

Jairroberto

06/06/2003

Olá, amigo!

Na pressa esqueci de informar a declaração [b:28b4c2d63d]interface[/b:28b4c2d63d] da função, que declara parâmetros condicionais, com valores default:

function ListarArquivos(const Mascara: string; Lista: TStrings; const IncluirCaminho: Boolean = False; const IncluirDiretorios: Boolean = False; const IncluirPontos: Boolean = False): Integer;


Aqui vai um exemplo de como pegar os nomes dos arquivos no loop:

  sl := TStringList.Create; 
  try 
    if ListarArquivos(´C:\Windows\*.ini´, sl, True) > 0 then 
      for i := 0 to Pred(sl.Count) do 
      begin 
        ShowMessage(sl[i]); 
      end; 
  finally 
    sl.Free; 
  end; 



Um abraço,
Jair


GOSTEI 0
Ericfp

Ericfp

06/06/2003

Ola.
O comando que vc me enviou para pegar o mone dos arquivos esta trazendo o caminho completo, e o que eu quero e somente o nome do arquivo + a extensão (teste.txt).

Fico no Aguardo.
:lol:


GOSTEI 0
POSTAR