Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema con _wfindfirst

Iniciado por H-K, 05 de Diciembre de 2008, 02:48:22 PM

« anterior - próximo »

H-K

Wenas. Ando liado con filtrados de directorios, y me he encontrado un comportamiento de la función de Windows _wfindfirst que me ha resultado bastante gracioso:

Pongamos que yo quiero obtener los archivos con extensión ".dae" de un directorio. Pues resulta que al pasarle la cadena "*.dae" como filtro a la función, me devuelve archivos con extensión ".dae_cache" también. Me voy a MSDN a ver qué pasa, y tras escarbar un poquito lo que me encuentro es esto:

Cita de: MSDNNote

When using the asterisk wildcard character in a searchPattern (for example, "*.txt"), the matching behavior varies depending on the length of the specified file extension. A searchPattern with a file extension of exactly three characters returns files with an extension of three or more characters, where the first three characters match the file extension specified in the searchPattern. A searchPattern with a file extension of one, two, or more than three characters returns only files with extensions of exactly that length that match the file extension specified in the searchPattern. When using the question mark wildcard character, this method returns only files that match the specified file extension. For example, given two files in a directory, "file1.txt" and "file1.txtother", a search pattern of "file?.txt" returns only the first file, while a search pattern of "file*.txt" returns both files.

Esto es del Managed Runtime, pero pasa lo mismo en _wfindfirst, con la salvedad de que el carácter '?' no me soluciona nada aquí.
Resumiendo, que si mi filtro tiene 3 caracteres en la extensión, me va a devolver todo lo que tenga 3 o más caracteres de extensión. 8o
Y lo mejor, el ejemplo:

Cita de: MSDNThe following list shows the behavior of different lengths for the searchPattern parameter:

    *  "*.abc" returns files having an extension of.abc,.abcd,.abcde,.abcdef, and so on.
    *  "*.abcd" returns only files having an extension of.abcd.
    *  "*.abcde" returns only files having an extension of.abcde.
    *  "*.abcdef" returns only files having an extension of.abcdef.

¿Alguien se ha encontrado alguna vez con esto? O mejor, ¿existe alguna manera "elegante" de arreglarlo? (tengo una, pero me parece un poco chapucera, la verdad)

Y la última pregunta: ¿soy el único al que le parece estúpido?  :P Creo haber leído algo de que está hecho así por compatibilidad con el tema 8.3 de nombre de archivos, no estoy seguro... pero es que tiene guasa.

Saludos!!
"It's not who I am underneath, but what I do that defines me"

Lambda

creo que usando FindFirstFile y FindNextFile puedes solucionarlo, yo son los que uso a la hora de listar archivos. :)
Desarrollando Kelion Online, Blexton Entertainment

H-K

Gracias por la respuesta Lambda :), pero las he probado y me dan exactamente el mismo problema  >.<
Nada, seguiré con la chapucilla por ahora, a ver si aparece una solución que no implique hacks horrorosos.
"It's not who I am underneath, but what I do that defines me"

Mars Attacks

¿No se permite búsquedas con el típico "*.abc$" para indicar el final de la cadena de algún modo? (Estoy bastante linuxizado y me parece raro que en Windows no se pueda).

H-K

Pues si se puede, no está documentado (o yo no lo he encontrado :P). Probé con el '$' a ver si sonaba la flauta, pero nada.
Mirando en las fuentes del CRT he visto que _wfindfirst internamente llama a FindFirstFile para pillar el primer archivo, así que el problema está en cómo filtra FindFirstFile. En MSDN tampoco dicen gran cosa, así que esto es para volverse loco  Oo

Bueno, si encuentro algo más lo comento por aquí :)
"It's not who I am underneath, but what I do that defines me"






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.