Por alguna loca razón, no puedo encontrar una manera de obtener una lista de archivos con un globo para un directorio dado.
Actualmente estoy atrapado con algo en la línea de:
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSArray *dirContents = [[NSFileManager defaultManager]
directoryContentsAtPath:bundleRoot];
..y luego quitar las cosas que no quiero, lo que apesta. Pero lo que realmente me gustaría es poder buscar algo como "foo * .jpg" en lugar de preguntar por el directorio completo, pero no he podido encontrar algo así.
Entonces, ¿cómo diablos lo haces?
ios
objective-c
iphone
cocoa
cocoa-touch
sammich
fuente
fuente
Respuestas:
Puede lograr esto fácilmente con la ayuda de NSPredicate, así:
Si necesita hacerlo con NSURL, se ve así:
fuente
Esto funciona bastante bien
IOS
, pero también debería funcionarcocoa
.fuente
¿Qué pasa con el uso de los métodos hasSuffix y hasPrefix de NSString? Algo así como (si está buscando "foo * .jpg"):
Para coincidencias simples y directas como esa, sería más simple que usar una biblioteca de expresiones regulares.
fuente
contentsOfDirectoryAtPath:error:
lugar dedirectoryContentsAtPath
porque esdeprecated
desdeiOS
2.0Método muy simple:
fuente
Unix tiene una biblioteca que puede realizar operaciones de globalización de archivos por usted. Las funciones y los tipos se declaran en un encabezado llamado
glob.h
, por lo que deberá#include
hacerlo. Si abre un terminal y abra la página de manual de glob escribiendoman 3 glob
, obtendrá toda la información que necesita saber para usar las funciones.A continuación se muestra un ejemplo de cómo podría llenar una matriz de archivos que coinciden con un patrón global. Cuando utilice la
glob
función, debe tener en cuenta algunas cosas.glob
función busca archivos en el directorio de trabajo actual. Para buscar en otro directorio, deberá anteponer el nombre del directorio al patrón global como lo hice en mi ejemplo para obtener todos los archivos/bin
.glob
llamandoglobfree
cuando haya terminado con la estructura.En mi ejemplo, uso las opciones predeterminadas y no hay devolución de llamada de error. La página de manual cubre todas las opciones en caso de que haya algo allí que desee usar. Si va a utilizar el código anterior, le sugiero agregarlo como una categoría
NSArray
o algo así.Editar: he creado una esencia en github que contiene el código anterior en una categoría llamada NSArray + Globbing .
fuente
stringWithCString:
es obsoleto. El reemplazo correcto es-[NSFileManager stringWithFileSystemRepresentation:length:]
, aunque creo que la mayoría de la gente lo usastringWithUTF8String:
(lo cual es más fácil pero no garantiza que sea la codificación correcta).Necesita rodar su propio método para eliminar los archivos que no desea.
Esto no es fácil con las herramientas integradas, pero podría usar RegExKit Lite para ayudar a encontrar los elementos en la matriz devuelta que le interese. De acuerdo con las notas de la versión, esto debería funcionar en las aplicaciones Cocoa y Cocoa-Touch.
Aquí está el código de demostración que escribí en unos 10 minutos. Cambié el <y> a "porque no se mostraban dentro del bloque previo, pero aún funciona con las comillas. Quizás alguien que sepa más sobre formatear código aquí en StackOverflow lo corrija (¿Chris?).
Este es un proyecto de plantilla de la herramienta de línea de comandos "Herramienta básica". Si tengo mi git daemon funcionando en mi servidor de inicio, editaré esta publicación para agregar la URL del proyecto.
fuente
No pretendo ser un experto en el tema, pero debes tener acceso a ambos
glob
ywordexp
la función de Objective-C, no?fuente
stringWithFileSystemRepresentation no parece estar disponible en iOS.
fuente
Swift 5
Esto funciona para el cacao.
fuente
Swift 5 para cacao
fuente