Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   listar carpetas de un directorio? (https://www.clubdelphi.com/foros/showthread.php?t=55154)

gabrielflowers 09-04-2008 17:53:19

listar carpetas de un directorio?
 
hola a todos, me encuentro haciendo un sistema, y quisiera hacer un listado de las carpetas (solo las carpetas, no archivos) que hay en un directorio, por ejemplo quiero listar que carpetas hay en el directorio "/temas" de mi proyecto, por si acaso solo quiero un listado, o mejor aun, quisiera cargar ese listado de nombres de carpetas en un array; no me sugieran la opcion de implementar un
[HTML]<input type="file" name="temas">...[/HTML]
por que no es lo que quiero, el asunto no va por ahi, gracias de antemano

keyboy 09-04-2008 18:09:33

Basándonos en el ejemplo que viene en el manual de PHP:

Código PHP:

<pre>
<?php
$dir 
'.';

$dh opendir($dir);
while ((
$file readdir($dh)) !== false)
{
    if (
is_dir($dir$file) && $file != '.' && $file != '..')
    {
        echo 
$file "\n";
    }
}
?>
</pre>

Bye

gabrielflowers 09-04-2008 18:34:27

gracias por sus aportes, en base a ello consegui una solucion probada:
Código PHP:

if($gestor=opendir('../temas'))
 {
     while ((
$archivo=readdir($gestor))!==false)
     {
      if ((!
is_file($archivo))and($archivo!='.')and($archivo!='..'))
          
$array_temas[$archivo]=$archivo;
     }
     
closedir($gestor);
 } 

y digo que es una solucion probada, porque los ejemplos que me ponen y los de php, tienen algunas falencias, como que me listan tambien "." (mi actual directorio, supongo) y "..", espero este ejemplo sirva de referencia para otros, gracias, saludos.

keyboy 09-04-2008 18:38:11

Cita:

Empezado por gabrielflowers (Mensaje 278588)
los ejemplos que me ponen y los de php, tienen algunas falencias, como que me listan tambien "." (mi actual directorio, supongo) y ".."

Vaya. Pues te aseguro que entre las falencias del ejemplo que te puse no está la de listar esos directorios.

Bye

gabrielflowers 09-04-2008 18:41:22

para keyboy, oye no te molestes, pero sin dudas que probe tu codigo, y de hecho no me lista ni una sola carpeta del directorio en cuestion, y esa es su falencia justamente, pero gracias de todos modos, pues tu ejemplo me sirvio de base para hacer lo que buscaba, pues pude filtrar "." y ".." que se me listaban, gracias...

pdta: segun veo la funcion is_dir($archivo) solo toma en cuenta "." y ".."; asi que decidi usar mejor !is_file($archivo), osea filtrar aquellos que no son archivos en si (que vendrian a ser las carpetas)

Julián 10-04-2008 00:45:41

Hola!

El código de keyboy es correctisimo.
Si se le califica como erroneo lo educado sería acompañar una explicación.

Un saludo!

gabrielflowers 10-04-2008 00:51:10

oye julian, revisando bien el codigo de keyboy concluyo de que evidentemente si funciona, pero analizandolo mejor, el codigo que puse al final es mas seguro, y mas optimo quizas que el de keyboy, de todos modos, gracias

dec 10-04-2008 01:01:48

Hola,

Cita:

Empezado por Gabriel
para keyboy, oye no te molestes, pero sin dudas que probe tu codigo, y de hecho no me lista ni una sola carpeta del directorio en cuestion, y esa es su falencia justamente (...)

Pues debe ser por que, si te fijas, en el código se unen directorio y subdirectorio, de modo que para que funcione el "script" como se espera habrá de entregarse la ruta de un directorio tal que así:

Código:

/directorio/
Y no así:

Código:

/directorio
Es decir, incluyendo el separador de directorios al final, puesto que de otro modo luego buscaríamos directorios tal que:

Código:

/directoriossubdirectorio
Cuando en realidad lo que estamos buscando es:

Código:

/directorios/subdirectorio
Por lo demás, el "script" de Keyboy funciona como se espera, y no tiene en cuenta los directorios "." y "..".

gabrielflowers 10-04-2008 01:04:45

dec, evidemente fue por ahi mi tropiezo que tuve al principio al probar el codigo de keyboy, asi que averigue un poco mas y fue asi como di con la solucion que plantee, que por cierto me parece mejor que la de keyboy, gracias.

dec 10-04-2008 01:10:48

Hola,

¿Pero por qué te parece mejor tu solución que la de Keyboy? Explícalo. Yo lo único que sé es que Keyboy utiliza la función "is_dir" y tú la función "is_file". Pero, considero la función "is_dir" más apropiada. ¿Por qué? Porque lo que queremos es buscar directorios, no "algo que no sea un archivo".

Por ejemplo, no sé si estoy equivocado, pero, podría darse el caso de que tu "script" listara otras cosas que no sean archivos, pero, tampoco directorios, como los "enlaces" de GNU/Linux. Mientras que la función "is_dir" busca directorios, que es lo que necesitas.

gabrielflowers 10-04-2008 01:14:41

dec, gracias por tu aclaracion, lo tomare en cuenta, de hecho no habia pensado en esa posibilidad que mencionas en linux, de verdad lo tomare muy en cuenta; bueno en realidad creo que mi solucion es mejor por que uso una variable menos ($dir), si revisas ambos codigos te daras cuenta, ademas de que controlo que esa variable evidentemente sea un directorio...

pero de verdad gracias por tu comentario, lo tomare muy en cuenta

dec 10-04-2008 01:18:28

Hola,

Ahora que lo dices, creo que en tu "script", el usar esa variable de menos, en realidad es una desventaja, cuando no un problema. Verás. Keyboy usa la variable "$dir", no sólo para dar más soltura al "script", puesto que puedes especificar la ruta del directorio a listar en dicha variable, y no, directamente, donde se supone que ha de usarse.

Pero eso no es todo. Si te fijas, Keyboy usa la variable "$dir" para unirla al subdirectorio que se encuentra en el directorio de marras, de modo que, por decirlo así, usa una ruta absoluta para comprobar la existencia del subdirectorio. Si no me equivoco, tú podrías tener problemas al no hacerlo así, puesto que te basas en el "directorio activo", pero, este podría llegar a cambiar en un momento dado. ;)

gabrielflowers 10-04-2008 01:23:01

dec, claro que poner el nombre del directorio ($dir) en una variable, podria ser mas util, pero en mi caso mi directorio no es tan "activo" que digamos, es mas bien estatico, por lo que usar una variable mas me resulta una linea (innecesaria) de codigo mas...

bueno, para todos pongo aca el codigo final que me parece es la solucion definitiva a "como listar carpetas de un directorio (temas/)":
Código PHP:

if($gestor=opendir('../temas'))
 {
     while((
$archivo=readdir($gestor))!==false)
     {
      if((
is_dir('../temas/'.$archivo))and($archivo!='.')and($archivo!='..'))
          
$temas[$archivo]=$archivo;
     }
     
closedir($gestor);
 } 

gracias a todos por sus aportes, saludos, espero este tema sirva de ayuda a muchos, bye.

keyboy 10-04-2008 01:25:22

El código que originalmente puse tenía ciertamente la carencia de concatenar el nombre de directorio. No me había percatado porque lo probé con ".", caso en el que evidentemente no es necesario. Al agregar el nombre de directorio pude ver bien el listado. Como indica dec, y no sólo en linux, si se usa !is_file() en lugar de is_dir() pues se obtiene, por ejemplo, los lnk correspondientes a accesos directos.

Lo que realmente me sorprende es que funcione en "../temas" sin pegar el nombre de directorio. Pero si le funciona, pues qué mejor.

Bye


La franja horaria es GMT +2. Ahora son las 15:52:48.

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