Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: FreeYourMind on June 13, 2011, 11:28:51 AM

Title: Problemas con diropen
Post by: FreeYourMind on June 13, 2011, 11:28:51 AM
Hola, no se lo que estoy haciendo mal, pero diropen me devuelve un valor cuando intento abrir un directorio que no existe:

existe_ruta = diropen("/no_existo/");

  if(existe_ruta) say("existe"); say(existe_ruta); dirclose("/no_existo/");
  else
     say("não existe");
  end

la carpeta no_existo no existe xD

El say me devuelve esto:

existe
124494136









Title: Re: Problemas con diropen
Post by: Yawin on June 13, 2011, 11:53:12 AM
Yo probaría con esto:
if(!diropen("/no_existo/")) say("existe"); say(existe_ruta); dirclose("/no_existo/");
  else
     say("não existe");
  end
Title: Re: Problemas con diropen
Post by: FreeYourMind on June 13, 2011, 12:17:35 PM
igual, no existe, si creo la carpeta dice no existe de igual forma
Title: Re: Problemas con diropen
Post by: Rein (K´)ah Al-Ghul on June 13, 2011, 06:41:07 PM
Primero deberia verificar si el directorio que intentas abrir existe...

http://wiki.bennugd.org/index.php?title=Glob
Title: Re: Problemas con diropen
Post by: FreeYourMind on June 13, 2011, 06:59:52 PM
si lo estoy usando para hacer esa comprobación, me dijó splinter para usar diropen para saber si un directorio existe. pero me parece que el glob ese es lo que realmente debo usar...
Title: Re: Problemas con diropen
Post by: SplinterGU on June 13, 2011, 07:19:12 PM
es cierto, no estoy retornando error al abrir, pero el error te lo deberia dar en el primer dir_read...

igual para la proxima version, la funcion dara error si la funcion falla internamente y no sera necesario esperar al dir_read
Title: Re:Problemas con diropen
Post by: laghengar on February 23, 2013, 04:18:39 AM
Free, has logrado hacer que compruebe bien si la carpeta existe o no?

Yo estoy con ello y no doy con cómo hacerlo. Por ahora voy a crear la carpeta y seguir adelante ya que no consigo hacerlo bien.

if(glob("familias"))
    say("se ha encontrado la carpeta familias");

    dir_familias=diropen("familias");
    say("Se ha abierto la carpeta familias");

    else

    say("No se ha encontrado la carpeta familias");

    mkdir("familias");
    say("Se ha creado la carpeta familias");

    dir_familias=diropen("familias");       
    say("Se ha abierto la carpeta familias");

end


Siempre me hace el "else" estando creada la carpeta o no, he probado diferentes combinaciones en glob, y no ha habido manera de que por una vez vea que la carpeta existe.
Title: Re:Problemas con diropen
Post by: FreeYourMind on February 23, 2013, 09:19:49 AM
prueba de esta forma:

WHILE(glob("/*") != "")

     IF(fileinfo.directory == TRUE && fileinfo.name == "familias")
     say("se ha encontrado la carpeta familias");
     END
END
Title: Re:Problemas con diropen
Post by: DCelso on February 23, 2013, 10:40:42 AM
Haz un diropen y luego un dirread. Este te dara error so no existe. Ya te lo dijo splintergu.
Title: Re:Problemas con diropen
Post by: SplinterGU on February 23, 2013, 06:16:09 PM
Quote from: DCelso on February 23, 2013, 10:40:42 AM
Haz un diropen y luego un dirread. Este te dara error so no existe. Ya te lo dijo splintergu.

yo lo dije? (me suena que si, pero no recuerdo, y no he respondido en este hilo porque me suena a deja-vu)
Title: Re:Problemas con diropen
Post by: FreeYourMind on February 23, 2013, 06:53:25 PM
dejale splinter, ha confundido las dudas iniciales con la ultima que ha reabierto el hilo  ;D
Title: Re:Problemas con diropen
Post by: SplinterGU on February 23, 2013, 08:01:37 PM
la cosa es que glob no retorna un valor numerico sino una string... y es vacia cuando no encuentra el pattern o falla...

se debe comparar contra ""

edit: lo dice claramente la wiki http://wiki.bennugd.org/index.php?title=Glob
Title: Re:Problemas con diropen
Post by: laghengar on February 24, 2013, 10:49:41 AM
Vale gente, lo he conseguido  ;D . Después de tener en cuenta todas las opiniones y descifrándome la wiki lo he conseguido con este código. Mi fallo estaba en que no entendía como funcionaba glob()


dir_familias=0

while (glob("*")!= "")
    say(fileinfo.name);

    if(fileinfo.directory == true and fileinfo.name == "familias")
        say("se ha encontrado la carpeta familias");

        dir_familias=diropen(fileinfo.name);
        say("Se ha abierto la carpeta familias");

    end
end

if(dir_familias==0);
    say("No se ha encontrado la carpeta familias");

    mkdir("familias");
    say("Se ha creado la carpeta familias");

    dir_familias=diropen("familias");
    say("Se ha abierto la carpeta familias");

end


Hace lo que quiero, si no está la carpeta familias la crea, y si existe la abre, leyendo todos los nombres de archivos correctamente. Free diste con ello ;)

con glob("/*"); me hace algo que no entiendo. Me mira archivos incluso de otras carpetas (documents and setting, windows, etc, etc pero no todas la carpetas si no que parece más bien que las mira de forma aleatoria).

Muchas gracias por todo :) , ahora puedo seguir adelante poniéndole más cosas.
Title: Re:Problemas con diropen
Post by: SplinterGU on February 24, 2013, 05:38:32 PM
no mira de forma aletaorea... con "/*" son todos los archivos del raiz.
Title: Re:Problemas con diropen
Post by: laghengar on February 24, 2013, 05:52:23 PM
Quote from: SplinterGU on February 24, 2013, 05:38:32 PM
no mira de forma aletaorea... con "/*" son todos los archivos del raiz.

Ah  ;D . Pero por lo que me ha parecido ver también mira el directorio de ejecución. Cómo no me puse a revisar todos los archivos que me miró, pensé que lo hacía de forma aleatoria, perdón  ;D .