Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Ayuda a listar archivos en ListView (https://www.clubdelphi.com/foros/showthread.php?t=73635)

chuli17 06-05-2011 13:39:43

Ayuda a listar archivos en ListView
 
Hola buenas, aber si me podiais echar un vistacillo a ese codigo, lo que pasa es que listo las carpetas y archivos de unidades de disco duro y solo me da la primera carpeta o el primer archivo y con mas que le doy vueltas no consigo sacar el fallo... este es el code

Código Delphi [-]
if Copy(Date, 1, 14) = 'LISTARARCHIVOS' then
begin
Delete(Date, 1, 15); //Borra 'LISTARARCHIVOS|'
Newl := ListView1.FindCaption(0,Inttostr(Socket.SocketHandle),False,True,False); //Buscamos la conexión
if Newl <> nil then
begin
Form2.ListViewArchivos.Items.BeginUpdate;
(Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Clear; //Limpia primero...
if Length((Newl.SubItems.Objects[0] as TForm2).Edit1.Text) > 3 then
begin
//Newl := (Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Items.Add;
Newl.ImageIndex := 0;
(Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Items.Add.Caption := '<..>';
end;
//while Pos('|', Date) > 1 do
begin
TempStr := Copy(Date, 1, (Pos('|', Date) - 1));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
if TempStr[1] = #2 then //entonces le llegó una carpeta
begin
Delete(TempStr, 1, 1); //borra el #2
Newl := (Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Items.Add;
Newl.ImageIndex := 1; //1 es el icono de carpeta cerrada
Newl.Caption := TempStr;
Newl.SubItems.Add('');
Newl.SubItems.Add('Carpeta de archivos');
Newl.SubItems.Add('');
end
else //entonces es un archivo, saque tambien la información extra...
begin
Newl := (Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Items.Add;
Newl.ImageIndex := 2;
Newl.Caption := TempStr;
TempStr := (Copy(Date, 1, (Pos('|', Date) - 1)));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
Newl.SubItems.Add(TempStr + 'Kb'); //agrega el tamaño
TempStr := (Copy(Date, 1, (Pos('|', Date) - 1)));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
Newl.SubItems.Add(TempStr); //agrega el tipo
TempStr := (Copy(Date, 1, (Pos('|', Date) - 1)));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
Newl.SubItems.Add(TempStr); //agrega la fecha
end;
end;
end;
end;

Aber si me podeis echar una mano a encontrar ese error ke no deja listar todas las carpetas y archivos.... Gracias a todos

Casimiro Notevi 06-05-2011 15:35:38

¿El error, cuál error?

chuli17 06-05-2011 18:05:17

Hola de nuevo, lo siento si me esplico mal esque nose como esplicarme, aber error no da ninguno solo es que ala ora que listo por ejemplo C:\ solo me sale la primera carpeta o el primer archivo que en mi caso seria "Archivos de programa" y las demas carpetas y archivos no salen, no se si asi me esplico mejor...

Casimiro Notevi 06-05-2011 18:19:07

Si lo que quieres es listar los ficheros de un directorio entonces busca por "findfirst" y "findnext"

chuli17 06-05-2011 18:35:13

Aber lo que estoy aciendo es un Filemanager con un cliente y un servidor, tengo un Combobox donde se listan las unidades de disco duro al selecionar alguna de las unidades por ejemplo C:\ del combobox se listan todos los archivos y carpetas que alla en esa unidad y el ploblemas es ese que solo lista la primera carpeta o archivo que alla.

chuli17 08-05-2011 23:55:41

Ya e sacado el fallo, asi quedo el codigo




Código Delphi [-]
if Copy(Date, 1, 14) = 'LISTARARCHIVOS' then
begin
Delete(Date, 1, 15); //Borra 'LISTARARCHIVOS|'
Newl := ListView1.FindCaption(0,Inttostr(Socket.SocketHandle),False,True,False); //Buscamos la conexión
if Newl <> nil then
begin
Form2.ListViewArchivos.Items.BeginUpdate;
(Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Clear; //Limpia primero...
if Length((Newl.SubItems.Objects[0] as TForm2).Edit1.Text) > 3 then
begin
Newl.ImageIndex := 0;
(Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Items.Add.Caption := '<..>';
end;
while Pos('|', Date) > 1 do
begin
TempStr := Copy(Date, 1, (Pos('|', Date) - 1));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
if TempStr[1] = #2 then //entonces le llegó una carpeta
begin
Newl := ListView1.FindCaption(0,Inttostr(Socket.SocketHandle),False,True,False); //Buscamos la conexión
if Newl <> nil then
Delete(TempStr, 1, 1); //borra el #2
Newl := (Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Items.Add;
Newl.ImageIndex := 1; //1 es el icono de carpeta cerrada
Newl.Caption := TempStr;
Newl.SubItems.Add('');
Newl.SubItems.Add('Carpeta de archivos');
Newl.SubItems.Add('');
end
else //entonces es un archivo, saque tambien la información extra...
begin
Newl := ListView1.FindCaption(0,Inttostr(Socket.SocketHandle),False,True,False); //Buscamos la conexión
if Newl <> nil then
Newl := (Newl.SubItems.Objects[0] as TForm2).ListViewArchivos.Items.Add;
Newl.ImageIndex := 2;
Newl.Caption := TempStr;
TempStr := (Copy(Date, 1, (Pos('|', Date) - 1)));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
Newl.SubItems.Add(TempStr + 'Kb'); //agrega el tamaño
TempStr := (Copy(Date, 1, (Pos('|', Date) - 1)));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
Newl.SubItems.Add(TempStr); //agrega el tipo
TempStr := (Copy(Date, 1, (Pos('|', Date) - 1)));
Delete(Date, 1, Pos('|', Date)); //Borra lo que acaba de copiar
Newl.SubItems.Add(TempStr); //agrega la fecha
end;
end;
end;
end;



lo dejo por si a alguien le puede sevir como ejemplo. Ya podeis cerrar el post si quereis. Gracias.


La franja horaria es GMT +2. Ahora son las 08:09:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi