Поиск имени файла с подстановочным знаком в iPhone SDK - PullRequest
4 голосов
/ 02 марта 2011

Я пытаюсь написать программу, которая создает файлы с динамическим именем .csv, которые необходимо извлечь или удалить позднее. То, что я пытаюсь сделать, это:

Я хотел бы запустить алгоритм, который выяснит, существует ли какой-либо из этих типов файлов. Например, если я динамически называю файл чем-то вроде foobar ##. Csv с ##, указывающим на то, что число динамически генерируется и добавляется к имени файла, я хотел бы узнать, существует ли какой-либо файл foobar ##. Csv независимо от номер используется. Обычно я бы использовал строку кода, подобную этой:

NSString *dataFileName = [[self documentPath] stringByAppendingPathComponent:@"foobar01.csv"];

Прямо сейчас я просто использую цикл, который циклически перебирает каждое значение и отключает логическое значение, если оно найдено, но я знаю, что это не лучшая практика, поскольку он ограничивает возможные номера файлов, которые может использовать пользователь. Любое понимание того, как я мог бы использовать какой-то подстановочный знак при таком поиске, будет оценено.

Кроме того, я хотел бы создать метод, который удалял бы любые файлы .csv, найденные программой, но я предполагаю, что метод, использованный для решения вышеуказанного алгоритма, можно использовать и для удаления.

Ответы [ 3 ]

6 голосов
/ 08 октября 2011

Подстановочный знак Для сопоставления с использованием подстановочной строки в запросе можно использовать аналог вместо оператора сравнения и включить «*» (соответствует нулю или более символов) или «?» (Точно соответствует 1 символу) в качестве подстановочных знаков следующим образом:

NSString *match = @"imagexyz*.png";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like %@", match];
NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];

http://useyourloaf.com/blog/2010/7/27/filtering-arrays-with-nspredicate.html

2 голосов
/ 02 марта 2011

Взгляните на NSFileManagers contentsOfDirectoryAtPath:error: метод. Он вернет массив со строками, содержащими имена всех объектов (файлов и каталогов) рассматриваемого каталога.

Затем вы можете перечислить этот массив и проверить наличие "foobar" в этих строках. Либо сделайте что-нибудь для файлов, которые вы нашли сразу, либо сохраните «положительные» имена файлов в другом массиве для последующей обработки.

0 голосов
/ 02 марта 2011

образец кода для того, что сказал другой постер более или менее.

+(NSMutableArray*) allocLocalFiles
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSError * error = nil;
    NSArray *origContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory 
                                                                                error:&error];
    NSMutableArray * files = [[NSMutableArray alloc]init];

    for (NSString* file in origContents) {
        NSString * ext = [file pathExtension];
        if ([ext compare:@"csv"]==0 && something_else)
        {
            [files addObject:
             [NSString stringWithFormat:@"%@/%@",documentsDirectory,file]];
        }
    }
    return files;
}
...