– 如何检查文件是一个目录,audio,video或图像?

以下我的程序显示了Documents目录的内容并显示在一个tableView中。 但Documents目录包含一些目录,一些audio,一些video和一些图像等。

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]); 

所以,我想检查文件是否是目录,然后它可以显示在单元格的imageView目录图像。 audio,video和图像也是如此。

我在NSFileManager classReference中search,但dint得到一个解决scheme。

这个怎么做 ?

示例代码:

 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's a Directory. } } if ([[item pathExtension] isEqualToString:@"png"]) { //This is Image File with .png Extension } } 

您也可以使用统一types标识符,Bavarious 在这里所解释的。

示例代码:

 NSString *file = @"…"; // path to some file CFStringRef fileExtension = (CFStringRef) [file pathExtension]; CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL); if (UTTypeConformsTo(fileUTI, kUTTypeImage)) NSLog(@"It's an image"); else if (UTTypeConformsTo(fileUTI, kUTTypeMovie)) NSLog(@"It's a movie"); else if (UTTypeConformsTo(fileUTI, kUTTypeText)) NSLog(@"It's text"); CFRelease(fileUTI); 

看看NSURL类。 例如你可以通过说isFileUrl来查看url是否是一个文件的url。

此外,您可以通过执行以下操作获取url的最后一个组件(通常是文件名):

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

这些可以帮助你做你所需要的,但更重要的是看看NSURL文档。

对于任何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启动似乎工作。)

只是在图像文件types的情况下

 -(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]; }