По какой-то безумной причине я не могу найти способ получить список файлов с глобусом для данного каталога.
В настоящее время я застрял с чем-то вроде:
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSArray *dirContents = [[NSFileManager defaultManager]
directoryContentsAtPath:bundleRoot];
..и затем убираю вещи, которые я не хочу, и это отстой. Но что мне действительно нравится, так это возможность искать что-то вроде «foo * .jpg» вместо того, чтобы просить весь каталог, но я не смог найти ничего подобного.
Так как, черт возьми, ты это делаешь?
ios
objective-c
iphone
cocoa
cocoa-touch
sammich
источник
источник
Ответы:
Вы можете достичь этого довольно легко с помощью NSPredicate, вот так:
Если вам нужно сделать это с NSURL, это выглядит так:
источник
Это работает довольно хорошо
IOS
, но должно работатьcocoa
.источник
Как насчет использования методов hasSuffix и hasPrefix в NSString? Что-то вроде (если вы ищете "foo * .jpg"):
Для простых, простых совпадений, подобных этому, было бы проще, чем использовать библиотеку регулярных выражений.
источник
contentsOfDirectoryAtPath:error:
вместо,directoryContentsAtPath
потому что егоdeprecated
начиная сiOS
2.0Очень простой метод:
источник
В Unix есть библиотека, которая может выполнять операции с файлами. Функции и типы объявлены в названном заголовке
glob.h
, так что вам это нужно#include
. Если открыть терминал, откройтеman 3 glob
справочную страницу для glob, набрав, вы получите всю информацию, которую вам нужно знать, чтобы использовать функции.Ниже приведен пример того, как вы можете заполнить массив файлами, которые соответствуют шаблону смещения. При использовании
glob
функции необходимо помнить несколько вещей.glob
функция ищет файлы в текущем рабочем каталоге. Чтобы найти другой каталог, вам нужно добавить имя каталога к шаблону сглаживания, как я делал в своем примере, чтобы получить все файлы/bin
.glob
путем вызова,globfree
когда вы закончите со структурой.В моем примере я использую параметры по умолчанию и не возвращаю сообщение об ошибке. Страница man охватывает все опции на случай, если там есть что-то, что вы хотите использовать. Если вы собираетесь использовать приведенный выше код, я бы предложил добавить его в качестве категории
NSArray
или что-то в этом роде.Изменить: я создал GIST на GitHub, который содержит приведенный выше код в категории под названием NSArray + Globbing .
источник
stringWithCString:
устарела. Правильная замена есть-[NSFileManager stringWithFileSystemRepresentation:length:]
, хотя я думаю, что большинство людей используютstringWithUTF8String:
(что проще, но не гарантируется правильная кодировка).Вы должны свернуть свой собственный метод, чтобы удалить файлы, которые вы не хотите.
Это не легко с помощью встроенных инструментов, но вы можете использовать RegExKit Lite, чтобы помочь найти элементы в возвращаемом массиве, который вас интересует. Согласно примечаниям к выпуску, это должно работать как в приложениях Cocoa, так и Cocoa-Touch.
Вот демонстрационный код, который я написал примерно за 10 минут. Я изменил <и> на ", потому что они не показывались внутри предварительного блока, но он все еще работает с кавычками. Возможно, кто-то, кто знает больше о форматировании кода здесь в StackOverflow, исправит это (Крис?).
Это шаблон проекта утилиты командной строки «Foundation Tool». Если я установлю и запустлю мой демон git на своем домашнем сервере, я отредактирую этот пост, добавив URL-адрес проекта.
источник
Я не буду притворяться экспертом по этой теме, но у вас должен быть доступ к функциям
glob
иwordexp
функциям из target-c, нет?источник
stringWithFileSystemRepresentation не доступен в iOS.
источник
Swift 5
Это работает для какао
источник
Swift 5 для какао
источник