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

Iphone - как проверить, является ли файл каталогом, аудио, видео или изображением?

После моей программы отображается содержимое каталога Documents и отображается в таблицеView. Но каталог Documents содержит некоторые каталоги, некоторые аудио, некоторые видео и некоторые изображения и т.д.

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [dirPaths objectAtIndex:0];
fileType = @"" ;
NSString *subDirectoryPath = [docsDir stringByAppendingPathComponent:fileType];
NSLog(@"path : %@",subDirectoryPath);
files  = [[NSMutableArray alloc] initWithArray:[[NSFileManager defaultManager] contentsOfDirectoryAtPath:subDirectoryPath error:nil]];
NSLog(@"files ::::: %@ ",[files description]);

Итак, я хочу проверить, является ли файл каталогом, тогда изображение каталога может отображаться в образце ячейки. То же самое для аудио, видео и изображения.

Я искал в NSFileManager classReference, но не получаю решение.

Как это сделать?

4b9b3361

Ответ 1

Пример кода:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSArray *directory = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory];
BOOL isDirectory;
for (NSString *item in directory){
    BOOL fileExistsAtPath = [[NSFileManager defaultManager] fileExistsAtPath:item isDirectory:&isDirectory];
    if (fileExistsAtPath) {
       if (isDirectory)
       {
           //It a Directory.
       }
    }
    if ([[item pathExtension] isEqualToString:@"png"]) {
       //This is Image File with .png Extension
    }
}

Вы также можете использовать Единые идентификаторы типов, как объясняется Bavarious .

Пример кода:

NSString *file = @"…"; // path to some file
CFStringRef fileExtension = (CFStringRef) [file pathExtension];
CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);

if (UTTypeConformsTo(fileUTI, kUTTypeImage)) NSLog(@"It an image");
else if (UTTypeConformsTo(fileUTI, kUTTypeMovie)) NSLog(@"It a movie");
else if (UTTypeConformsTo(fileUTI, kUTTypeText)) NSLog(@"It text");

CFRelease(fileUTI);

Ответ 2

Посмотрите на класс NSURL. Например, вы можете увидеть, является ли URL-адрес файла, указав isFileUrl.

Кроме того, вы можете получить последний компонент URL-адреса (обычно это имя файла):

NSString *filename = [[url path] lastPathComponent];

Они могут помочь вам сделать то, что вам нужно, но более важно посмотреть документацию NSURL.

Ответ 3

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

///
/// Check if NSURL is a directory
///
internal func fileIsDir(fileURL: NSURL) -> Bool {
    var isDir: ObjCBool = false;
    fileManager.fileExistsAtPath(fileURL.path!, isDirectory: &isDir)
    return Bool(isDir);
}

///
/// Check if a path is a directory
///
internal func fileIsDir(path: String) -> Bool {
    var isDir: ObjCBool = false;
    fileManager.fileExistsAtPath(path, isDirectory: &isDir)
    return Bool(isDir);
}

(Обратите внимание, что я пробовал делать return isDir as Bool, но это не сработало. Но, похоже, это инициирование Bool работает.)

Ответ 4

Только в случае типа файла изображения

-(BOOL)isImageSource:(NSURL*)URL
{
    CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)URL, NULL);
    NSString *UTI = (__bridge NSString*)CGImageSourceGetType(source);
    CFRelease(source);

    CFArrayRef mySourceTypes = CGImageSourceCopyTypeIdentifiers();
    NSArray *array = (__bridge NSArray*)mySourceTypes;
    CFRelease(mySourceTypes);

    return [array containsObject:UTI];
}