web-dev-qa-db-ja.com

iPhone-ファイルがディレクトリ、オーディオ、ビデオまたは画像であるかどうかを確認する方法は?

私のプログラムに従うと、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は解決策を得ました。

これを行う方法?

35
Subbu

サンプルコード:

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
    }
}

Bavarioushere で説明されているように、 Uniform Type Identifiers を使用することもできます。

サンプルコード:

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);
54
Bhavin

NSURLクラスを見てください。たとえば、isFileUrlと言うことで、URLがファイルURLかどうかを確認できます。

さらに、次の操作を行うことにより、URLの最後のコンポーネント(通常はファイル名)を取得できます。

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

これらは必要なことを行うのに役立ちますが、より重要なことはNSURLのドキュメントをご覧ください。

3
William Falcon

画像ファイルタイプの場合のみ

-(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];
}
2
Hugo the Lee

Swift 4.0のEvdzhanの回答を更新しました:

//
// 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
}
2
dougzilla

すべての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開始は機能しているようです。)

2
Evdzhan Mustafa