找出.png文件是否是截图?

时间:2012-07-19 07:40:57

标签: macos screenshot nsfilemanager

当我使用以下代码获取特定文件的属性时:

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”标志或我能读到的东西?

1 个答案:

答案 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更容易使用。