当我使用以下代码获取特定文件的属性时:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attributes = [fileManager attributesOfItemAtPath:p error:nil];
是否有属性可以知道它是否是截图?
现在我正在使用这段尴尬的代码:
if ([fileExtension isEqualToString:@"png"]) {
NSMutableArray *separatetFilename;
separatetFilename = [NSMutableArray arrayWithArray:[fileName componentsSeparatedByString:@" "]]; /* screenshots have multiple spaces in their names, I split them up to use the information */
if ([separatetFilename count] == 4) { /* screenshots names have 4 parts when splittet by spaces */
if ([[separatetFilename objectAtIndex:0] isEqualToString:@"Bildschirmfoto"]) { /* Bildschirmfoto = Screenshot in German */
/* Do Something */
}
}
}
使用这个解决方案,我必须为“屏幕截图”字符串添加本地化字符串...我搜索了纪录片但没有找到任何内容。是否有“isScreenshot”标志或我能读到的东西?
答案 0 :(得分:1)
您的问题"是否有" isScreenshot"旗帜或我能读到的东西?"答案是"是"。
我知道有两种方法可以得到答案:
a)询问NSFile~经理
b)询问元数据。
您已经使用过:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attributes = [fileManager attributesOfItemAtPath:p error:nil];
如果您现在查看此词典的键,例如与
NSLog( @"the keys: %@", [attributes allKeys] );
你会找到密钥@&#34; NSFileExtendedAttributes *&#34;。此键的值是一个字典,其中包含 com.apple.metadata:kMDItemIsScreenCapture 或 com.apple.metadata:kMDItemScreenCaptureType 或....这就是你问的对于。相应的值是具有二进制属性列表的NSData对象。评估这些plist会为窗口截图提供 1 (它是屏幕截图)和窗口,或者为窗口的一部分提供选择。< / p>
查看元数据可以通过以下方式完成:
MDItemRef item = MDItemCreate( kCFAllocatorDefault, (CFStringRef)p );
如果您只需要上述值,请使用相应的键创建一个列表(NSArray):
NSArray *ary = [NSArray arrayWithObjects:
@"kMDItemIsScreenCapture", @"kMDItemScreenCaptureType", nil];
NSDictionary *dict =
(NSDictionary *)MDItemCopyAttributes( item, (CFArrayRef)ary );
并测试它返回的内容;
NSLog( @"the metadata are %@", dict );
在这种情况下,返回的值是__NSCFBoolean(即NSNumber)和__NSCFString(即NSString),它比二进制plist更容易使用。