按照我的程序显示Documents目录的内容并显示在tableView中。 但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]);
所以,我想检查文件是否是目录,然后它的目录图像可以显示在单元格的imageView中。音频,视频和图像也是如此。
我在NSFileManager classReference中搜索过,但是dint得到了一个解决方案。
怎么做?
答案 0 :(得分:54)
示例代码:
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
}
}
您也可以按照 Bavarious Uniform Type Identifiers的说明使用here。
示例代码:
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);
答案 1 :(得分:3)
查看NSURL
课程。例如,您可以通过说isFileUrl
来查看网址是否为文件网址。
此外,您可以通过执行以下操作获取URL的最后一个组件(通常是文件名):
NSString *filename = [[url path] lastPathComponent];
这些可以帮助您完成所需,但更重要的是查看NSURL
文档。
答案 2 :(得分:2)
仅限图像文件类型
-(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];
}
答案 3 :(得分:2)
对于任何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 :(得分:2)
更新了Evdzhan对Swift 4.0的回答:
//
// Check if NSURL is a directory
//
func fileIsDir(fileURL: NSURL) -> Bool {
var isDir: ObjCBool = false;
FileManager.default.fileExists(atPath: fileURL.path!, isDirectory: &isDir)
return isDir.boolValue
}
//
// Check if a path is a directory
//
func fileIsDir(path: String) -> Bool {
var isDir: ObjCBool = false;
FileManager.default.fileExists(atPath: path, isDirectory: &isDir)
return isDir.boolValue
}
答案 5 :(得分:0)
如果你真的想确定它是一个图像
if let _ = UIImage(contentsOfFile: url.path){// is image}
或 Mac 上的 NSImage