seguridad - no me aparecen todas las fotos del iphone en el pc
iphone: ¿cómo verificar si el archivo es un directorio, audio, video o imagen? (5)
La respuesta actualizada de Evdzhan para 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
}
A continuación, mi programa muestra los contenidos del directorio de Documentos y se muestra en un tableView. Pero el directorio de Documentos contiene algunos directorios, algunos de audio, algunos de video y algunas imágenes, etc.
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]);
Entonces, quiero verificar si el archivo es el directorio, entonces la imagen del directorio se puede mostrar en el imageView de la celda. Lo mismo para audio, video e imagen.
Busqué en NSFileManager classReference, pero no obtuve una solución.
Como hacer esto ?
Mira la clase NSURL
. Por ejemplo, puede ver si la url es una url de archivo diciendo isFileUrl
.
Además, puede obtener el último componente de la url (generalmente el nombre del archivo) haciendo:
NSString *filename = [[url path] lastPathComponent];
Estos pueden ayudarlo a hacer lo que necesita, pero lo más importante es mirar la documentación de NSURL
.
Para cualquier amante de Swift, al llegar a esta pregunta tratando de verificar si un archivo es un directorio aquí, ve a:
///
/// 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);
}
(Nótese que traté de return isDir as Bool
pero no funcionó. Pero la iniciación de Bool anterior parece funcionar).
Solo en caso de tipo de archivo de imagen
-(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];
}
Código de muestra :
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
}
}
También puede usar identificadores de tipo uniforme como explica Bavarious here .
Código de muestra :
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);