Varrer conteúdo de um Disco (C:\; CDROM)

Delphi

10/11/2003

Pessoal, preciso de uma rotina que varra um disco, c: ou cdrom, onde um possa obter todos os nomes dos arquivos que contém dentro deles.

obrigado


Goncalves

Goncalves

Curtidas 0

Respostas

Otto

Otto

10/11/2003

Caro Golcalves, existe um componente do proprio delphi(Paleta: Sample) chamado TShellListView, coloque-o no form e de um duplo clique em cima dele. Selecione a opção: Use Path
e é so direcionar pra unidade de cd-rom..

espero ter ajudado... :)


GOSTEI 0
Sapienza

Sapienza

10/11/2003

O que o amigo Otto disse está correto, mas apenas funcionaria para selecionar a pasta ou unidade, para ler todo o conteúdo eu aconselho utilizar essa lógica:

-Uma list box com todos os arquivos a serem listados.
-Uma list box que conterá todas as pastas listadas.
-Uma rotina (colocarei por último) que leia todos os arquivos e pastas da pasta selecionada no objeto mencionado pelo Otto (vou chamar de pasta raíz) ou pelas subpastas.

O rotina funcionará como se fosse o comando do dos ´dir *.*´, mas como vc deve saber ela apenas lista a diretório, e não as subpastas. A rotina tb diferenciará os arquivos das pastas, colocando-os nas list box respectivas.

Vc começará adicionando a pasta selecionada no componente citado pelo Otto na list box de pastas. Chamará a rotina num looping (while) que só parará quando o contador de pastas (que será iniciado em zero) for igual ao número de itens da list box de pastas. Neste momento o ContPastas=0 e LBPastas.Items.Count=1.
OBS: A Rotina será chamada assim: RotinaLerDir(LBPastas.Items[ContPastas-1]); *O -1 no ContPastas é pq o 1o item tem índice 0.

O ContPastas será acrecido de 1 dentro da rotina Inc(ContPasta);

Assim, depois do primeiro looping o ContPastas será 1, se houver subpastas, o LBPastas.Items.Count será maior do que 1 pois as subpastas serão adcionadas na list box de pastas. Depois ele fará a primeira subpasta encontrada e assim até o último item, quando não haverá mais subpastas. Isso tb funcionda para a ´subsubpastas´ e assim sucessivamente.

Se não houver subpastas depois do primeiro looping, ContPasta=1 e LBPastas.Item.Count=1, logo ele sairá do looping.

Entendeu o exemplo, ao final vc terá um ListBox com as pastas e outra com os arquivos.

Cara, estava vendo aqui, não achei o código, me manda um e-mail pois terei que pegar com o estagiário aqui, fiz esse cógigo com ele.

ja_sapienza@yahoo.com.br


GOSTEI 0
Sapienza

Sapienza

10/11/2003

Dentro de uma procedure qualquer coloque esta rotina, onde a variável CONTPASTAS será uma variavel global

contpastas:=0;
Lbpasta.Items.Add(<indique a pasta raiz>);
While (Lbpasta.Items.Count > contpastas) do
Executar;

Depois vc criará uma procedure ´executar´ e dentro dele colocará esta rotina

var sr:tsearchrec;
i:integer;

begin
i:=findfirst(Lbpasta.items[contp]+´*.*´,(faAnyfile),sr);
while i=0 do
begin
if (sr.Name <> ´.´) and (sr.name<>´..´) then //(ignora as pastas que não intereçam e que toda a pasta contém)
begin
if (Sr.Attr and faDirectory>0) then
Lbpasta.Items.Add(Lbpasta.items[contpastas]+ sr.Name + ´\´ )
else
Lbarq.Items .add(Lbpasta.Items [contpastas]+ sr.Name );
end;
i:=findnext(sr);
end;
inc(contpastas);
end;


GOSTEI 0
POSTAR