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
Yo probaría con esto:
if(!diropen("/no_existo/")) say("existe"); say(existe_ruta); dirclose("/no_existo/");
else
say("não existe");
end
igual, no existe, si creo la carpeta dice no existe de igual forma
Primero deberia verificar si el directorio que intentas abrir existe...
http://wiki.bennugd.org/index.php?title=Glob
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...
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
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.
prueba de esta forma:
WHILE(glob("/*") != "")
IF(fileinfo.directory == TRUE && fileinfo.name == "familias")
say("se ha encontrado la carpeta familias");
END
END
Haz un diropen y luego un dirread. Este te dara error so no existe. Ya te lo dijo splintergu.
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)
dejale splinter, ha confundido las dudas iniciales con la ultima que ha reabierto el hilo ;D
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
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.
no mira de forma aletaorea... con "/*" son todos los archivos del raiz.
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 .