– 如何检查文件是一个目录,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]; }