gpt4 book ai didi

ios - 检查文件扩展名是否有效

转载 作者:行者123 更新时间:2023-12-01 19:01:29 26 4
gpt4 key购买 nike

我正在尝试使用[string pathExtension]获得文件扩展名,但这并不总是返回文件扩展名本身。例如:我有一个名为“Example.png”的文件,当我使用此方法时,会得到“png”,这是正确的。现在假设我有一个没有扩展名的文件,例如“Example”,我得到的nil仍然是正确的。当我有一个类似“Example.109”的文件时会怎样?我得到“109”作为扩展名,这是不正确的。碰巧“.109”是文件名本身的一部分。有没有办法验证这一点?

最佳答案

我认为有效文件扩展名是一个文件扩展名,在系统上存在一个声明/声明该扩展名的应用程序。

您可以使用以下代码轻松确定:

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()文件扩展名关联的UTI类型对 .109的调用返回了 NULL,这意味着没有应用程序声明该文件扩展名。将其与为 UTTypeCopyDeclaration()文件扩展名关联的UTI类型的 .jpg调用返回的结果进行比较。由于存在一个应用程序(或系统本身)声明该文件扩展名,因此该调用返回包含该信息的有效字典。

关于ios - 检查文件扩展名是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22618666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com