Подтвердить что ты не робот

Получить список файлов с определенными расширениями по указанному пути в Objective-C

Я новичок в Objective-C. Я разрабатываю приложение Cocoa. В настоящее время я ищу эквивалент этого кода С# в Objective C:

string[] fileList = Directory.GetFiles(DownloadPath, "*.jpg");

Возвращаемые строки необязательно должны быть полным путем, поскольку все, что мне нужно, это имена файлов. Я пробовал NSFileManager, но пока ничего хорошего. Спасибо.

EDIT: что я пытался с NSFileManager:

[someFileManager contentsOfDirectoryAtPath:path error:nil];

Я также хочу спросить: каков формат "пути"? Это звучит просто, но я совершенно незнаю о файловой системе MAC OS. Путь, который я использую, - это [URL-адреса NSOpenPanel], и они выглядят следующим образом:

file://localhost/Users/alex/Movies/

Иногда я получаю результаты, но в другое время Возвращенный NSArray просто пуст. Я довольно смущен этим, поэтому любая помощь будет оценена по достоинству.

EDIT2: Ответ здесь: NSPredicate endswith multiple files, вероятно, лучший выбор. Тем не менее, спасибо за ваш ответ.

4b9b3361

Ответ 1

Этот код должен работать:

NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
NSArray *jpgFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]];

Ответ 2

На самом деле вам нужно что-то вроде этого

NSArray *dirFiles = [fileManager contentsOfDirectoryAtURL:[NSURL fileURLWithPath:documentsDir] includingPropertiesForKeys:[NSArray array] options:0 error:nil] ;
NSArray *filteredFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.absoluteString ENDSWITH '.jpg'"]] ;

Потому что contentsOfDirectoryAtURL: возвращает массив NSURL, поэтому использование "self ENDSWITH".jpg "" приведет к сбою.

Ответ 3

может быть что-то в этом роде:

NSFileManager * fileMan = [[NSFileManager alloc] init];
NSArray * files = [fileMan contentsOfDirectoryAtPath:@"mypath/blah" error:nil]; 

if (files) 
{
    for(int index=0;index<files.count;index++)
    {
        NSString * file = [files objectAtIndex:index];

        if( [[file pathExtension] compare: @"jpg"] == NSOrderedSame )
        {
            // do something with files that end with .jpg
        }
    }
}

[fileMan release];