2014-03-24 116 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" 
     ); 
    }; 
} 

你可以從打印效果看,調用UTTypeCopyDeclaration()對於與.109文件擴展名關聯的UTI類型返回NULL,這意味着沒有聲明文件擴展名的應用程序。將其與使用與.jpg文件擴展名關聯的UTI類型的UTTypeCopyDeclaration()調用返回的結果進行比較。在那裏,調用返回一個包含信息的有效字典,因爲有一個應用程序(或系統本身)聲明瞭文件擴展名。

相關問題