1

次のコードで特定のファイルの属性を取得すると:

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」フラグまたは私が読むことができるものはありますか?

4

1 に答える 1

1

あなたの質問「「isScreenshot」フラグまたは私が読むことができるものはありますか?」答えは「YES」です。

答えを得るには、次の 2 つの方法があります。

a) NSFile~Manager に問い合わせる

b) メタデータを要求します。

すでに使用しています:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attributes = [fileManager attributesOfItemAtPath:p error:nil];

たとえば、この辞書のキーを見ている場合

NSLog( @"the keys: %@", [attributes allKeys] );

キー @"NSFileExtendedAttributes*" が見つかります。このキーの値は、com.apple.metadata:kMDItemIsScreenCaptureまたはcom.apple.metadata:kMDItemScreenCaptureTypeまたは ... のようなキーを持つ辞書です。これがあなたが求めたものです。対応する値は、バイナリ プロパティ リストを持つ NSData オブジェクトです。これらの plist を評価すると、 1 (スクリーンショット) のようなものと、ウィンドウのスクリーンショットまたはウィンドウの一部の選択の window が得られます。

メタデータを見るには、次の方法があります。

    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 よりも操作が簡単です。

于 2012-07-19T16:58:20.250 に答える