Fórum Leitura de Arquivos em Diretorio #165028
06/06/2003
0
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
Curtir tópico
+ 0Posts
06/06/2003
Jairroberto
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
06/06/2003
Ericfp
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
06/06/2003
Ericfp
Não estou conseguindo pegar o nome do arquivo que esta sendo lido no FOR DO.
Grato.
:o
Gostei + 0
06/06/2003
Ericfp
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
06/06/2003
Jairroberto
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
08/08/2003
Ericfp
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
Clique aqui para fazer login e interagir na Comunidade :)