Ответ 1
Этот код должен работать:
NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
NSArray *jpgFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]];
Я новичок в 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, вероятно, лучший выбор. Тем не менее, спасибо за ваш ответ.
Этот код должен работать:
NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
NSArray *jpgFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]];
На самом деле вам нужно что-то вроде этого
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 "" приведет к сбою.
может быть что-то в этом роде:
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];