2014-03-24 6 views
1

[string pathExtension]을 사용하여 파일 확장자를 가져 오려고하지만 확장자 자체가 항상 반환되는 것은 아닙니다. 예 : 'Example.png'라는 파일이 있습니다.이 메서드를 사용하면 'png'가 올바른 것입니다. 이제 'Example'과 같은 확장자가없는 파일이 있다고 가정 해 봅시다. nil이 여전히 올바른 것입니다. 'Example.109'와 같은 파일이 있으면 어떻게됩니까? 나는 '109'를 잘못된 확장자로 사용합니다. 그래서 '.109'는 파일명 자체의 일부입니다. 이것을 검증하는 방법이 있습니까?파일 확장자가 유효한지 확인하십시오.

+0

글쎄 그것은 유효성에 따라 무엇을 의미합니까? 파일 이름 형식은 확장명에 의해 결정되지 않고 파일 자체의 형식에 따라 파일 형식에 대한 자세한 정보를 제공하면 파일 유효성 검사 방법을 알 수 있습니다. –

+0

제 경우에는 파일은 전혀 중요하지 않습니다. 나는 단지 적절한 확장을하는 것에 관심이있다. 따라서 유효한 확장자는 문제의 경우처럼 잘못 파생되지 않은 것입니다. – Shwethascar

+5

109 유효한 확장 프로그램이지만 유효하지 않습니다. 수동으로 유효성을 검사해야합니다. – Merlevede

답변

3

유효한 파일 이름 확장자의 의미는 해당 확장명을 주장/주장하는 시스템에있는 응용 프로그램이있는 파일 이름 확장명입니다. 가능성이 콘솔에 다음과 같은 인쇄 것이다

NSString *pathExtension = [@"Example.109" pathExtension]; 

NSLog(@"pathExtension == %@", pathExtension); 

CFStringRef utiType = UTTypeCreatePreferredIdentifierForTag(
     kUTTagClassFilenameExtension, (__bridge CFStringRef)pathExtension, NULL); 

NSLog(@"utiType == %@", utiType); 

CFDictionaryRef declaration = UTTypeCopyDeclaration(utiType); 

NSLog(@"declaration == %@", declaration); // will likely print (null) 


CFStringRef jpgUTIType = UTTypeCreatePreferredIdentifierForTag(
     kUTTagClassFilenameExtension, CFSTR("jpg"), NULL); 

NSLog(@"jpg's UTI Type == %@", jpgUTIType); 

CFDictionaryRef knownDeclaration = UTTypeCopyDeclaration(jpgUTIType); 

NSLog(@"knownDeclaration == %@", knownDeclaration); 

if (utiType) CFRelease(utiType); 
if (knownFilenameExtensionsUTIType) CFRelease(knownFilenameExtensionsUTIType); 
if (declaration) CFRelease(declaration); 
if (knownDeclaration) CFRelease(knownDeclaration); 

:

은 쉽게 다음 코드를 사용하여 해당를 확인할 수 있습니다

pathExtension == 109 
utiType == dyn.age8xcqb3 
declaration == (null) 

jpg's UTI Type == public.jpeg 
knownDeclaration == { 
    UTTypeConformsTo = "public.image"; 
    UTTypeDescription = "JPEG image"; 
    UTTypeIdentifier = "public.jpeg"; 
    UTTypeTagSpecification =  { 
     "com.apple.ostype" = JPEG; 
     "public.filename-extension" =   (
      jpeg, 
      jpg, 
      jpe 
     ); 
     "public.mime-type" =   (
      "image/jpeg", 
      "image/jpg" 
     ); 
    }; 
} 

당신은 인쇄 된 결과에서 호출을 볼 수 있듯이 .109 파일 이름 확장명과 연결된 UTI 형식의 UTTypeCopyDeclaration()NULL을 반환했습니다. 즉, 파일 이름 확장명을 선언하는 응용 프로그램이 없음을 의미합니다. .jpg 파일 이름 확장명과 연결된 UTI 유형을 사용하여 UTTypeCopyDeclaration() 호출에 대해 반환 된 결과와 비교하십시오. 거기에서 응용 프로그램 (또는 시스템 자체)이 파일 이름 확장자를 선언하기 때문에이 호출은 정보가 들어있는 유효한 사전을 반환합니다.

관련 문제