我試圖使用[string pathExtension]
來獲取文件擴展名,但這並不總是返回文件擴展名本身。例如:我有一個名爲'Example.png'的文件,當我使用這個方法時,我得到'png',這是正確的。現在讓我們說我有一個沒有擴展名的文件,比如'Example',我得到了nil
這仍然是正確的。當我有像'Example.109'這樣的文件時會發生什麼?我得到'109'作爲不正確的擴展名。恰巧'.109'是文件名本身的一部分。有沒有辦法驗證這一點?檢查文件擴展名是否有效
1
A
回答
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()
調用返回的結果進行比較。在那裏,調用返回一個包含信息的有效字典,因爲有一個應用程序(或系統本身)聲明瞭文件擴展名。
相關問題
- 1. 檢查有效的文件擴展名
- 2. 檢查建議的文件擴展名是否在系統上有效/註冊的文件擴展名
- 3. 檢查沒有擴展名的文件名是否存在
- 4. 檢查文件名是否有效
- 5. 檢查文件(可能有多個擴展名)是否存在?
- 6. 如何檢查文件是否存在文件擴展名? C#
- 7. Android - 檢查文件擴展名是.mp4
- 8. 檢查用MaskedEditExtender擴展的文本框的值是否有效?
- 9. 找出文件是否有擴展名
- 10. 檢查argv是否包含特定的文件擴展名
- 11. 檢查遠程URL是否有有效的圖像擴展
- 12. php檢查文件擴展名爲
- 13. 用PHP檢查文件擴展名
- 14. ssh.net檢查文件擴展名
- 15. 檢查文件擴展名在android中
- 16. 文件擴展名的多重檢查
- 17. 在Formview中檢查文件擴展名
- 18. 檢查的文件擴展名
- 19. PHP檢查文件擴展名
- 20. python argparse文件擴展名檢查
- 21. 檢查文件名是否有效窗口名稱
- 22. 無論文件在Windows XP上的PHP文件擴展名是否存在,是否可以檢查文件名?
- 23. 檢查Localizable.strings文件是否有效
- 24. 檢查一個數組元素(文件)是否具有特定的擴展名
- 25. 檢查目錄中是否存在具有給定擴展名的文件
- 26. 檢查一個目錄是否包含具有給定擴展名的文件
- 27. 檢查文件擴展名爲'.ini'的文件是否存在,shell
- 28. 是否有效文件名
- 29. 如何檢查文件擴展名是大寫還是小寫?
- 30. mod_rewrite文件檢查擴展
那它取決於你的意思是有效的?文件名格式不是由擴展名決定的,而是由文件本身的格式決定的,如果你告訴更多關於它們是什麼文件的信息,我們可以幫助你知道如何驗證文件 –
在我的情況下,文件根本不重要。我只關心得到適當的延伸。所以一個有效的擴展將是不正確的派生出來的,就像在這個案例中那樣。 – Shwethascar
109是一個有效的擴展名,但它只對你無效。您需要手動驗證它。 – Merlevede