2012-01-08 24 views
11

¿Es posible usar la función API de Windows FindFirstFile para buscar múltiples tipos de archivos, por ejemplo *.txt y *.doc al mismo tiempo?FindFirstFile Múltiples tipos de archivos

Intenté separar patrones con '\0' pero no funciona, solo busca el primer patrón (supongo que es porque cree que '\0' es el final de la cadena).

Por supuesto, puedo llamar FindFirstFile con *.* patrón y luego comprobar mis patrones o llamarlo para cada patrón, pero no me gusta esta idea - lo voy a utilizar sólo si no hay otras soluciones.

+0

A mi leal saber y entender, no puede especificar varios comodines. Tendrá que usar '*' y filtrarse usted mismo. –

Respuesta

15

Esto no es compatible. Ejecútalo dos veces con diferentes comodines. O use *.* y filtre el resultado. Esta es definitivamente la mejor opción, los comodines son ambiguos de todos modos debido a la compatibilidad con los nombres de archivo 8.3 de MS-DOS heredados. Un comodín como * .doc encontrará archivos .doc y .docx, por ejemplo. Un nombre de archivo como longfilename.docx también crea una entrada llamada LONGFI~1.DOC

5

El MSDN docs no menciona nada sobre FindFirstFile permitiendo múltiples patrones de búsqueda, por lo que no existe.

En este caso lo mejor es escanear con una selección abierta (como C:\\some directory\* o *) y luego filtrar en base a cFileName miembro de WIN32_FIND_DATA 's, utilizando strrchr (o la variante apropiada Unicode) para encontrar la extensión. Debe ejecutarse bastante rápido para el pequeño conjunto de caracteres que componen una extensión de archivo.

Si conoce el que todas las extensiones son 3 caracteres decir, debe ser capaz de enmascarar apagado como *.??? para acelerar las cosas.

+0

El problema de rendimiento no es cuánto tiempo lleva filtrar el nombre de archivo, ya que eso tiene que hacerse en alguna parte. Es el hecho de que está presionando una función de API una y otra vez. Sin embargo, FindNextFile es bastante eficiente en mi experiencia, así que dudo que sea un problema. –