#include #include static sub_array (CFArrayRef subArray); int main (int argc, const char * argv[]) { CFStringRef file = CFSTR("/Users/forest/Desktop/Pic.jpg"); MDItemRef item = MDItemCreate(NULL, file); CFArrayRef attributeNames = MDItemCopyAttributeNames(item); CFIndex count = CFArrayGetCount(attributeNames); CFStringRef key; const char * k; CFTypeRef value; const char * v; CFStringRef type; Boolean num; CFDateFormatterRef format; CFStringRef date; Boolean val; long cfnum; int i; for (i = 0; i < count; i++) { key = CFArrayGetValueAtIndex(attributeNames, i); // k = CFStringGetCStringPtr(key, kCFStringEncodingMacRoman); // printf("%s ", k); // value = MDItemCopyAttribute(item, key); sub_array ((CFArrayRef)value); // CFIndex d = CFArrayGetCount(value); // type = CFCopyTypeIDDescription(CFGetTypeID(value)); // if (CFStringCompare(type, CFSTR("CFArray"), 0) == 0) { // sub_array ((CFArrayRef)value); // } // if (CFStringCompare(type, CFSTR("CFBoolean"), 0) == 0) { // num = CFBooleanGetValue(value); // printf("%d\n", num); // } // if (CFStringCompare(type, CFSTR("CFDate"), 0) == 0) { // format = CFDateFormatterCreate(NULL, NULL, kCFDateFormatterShortStyle, kCFDateFormatterShortStyle); // CFDateFormatterSetFormat(format, CFSTR("yyyy-MM-dd HH:mm:ss Z")); // date = CFDateFormatterCreateStringWithDate(NULL, format, value); // v = CFStringGetCStringPtr(date, kCFStringEncodingMacRoman); // printf("%s\n", v); // } // if (CFStringCompare(type, CFSTR("CFNumber"), 0) == 0) { // val = CFNumberGetValue((CFNumberRef)value, kCFNumberLongType, &cfnum); // printf("%d\n", cfnum); // } // if (CFStringCompare(type, CFSTR("CFString"), 0) == 0) { // v = CFStringGetCStringPtr(value, kCFStringEncodingMacRoman); // printf("%s\n", v); // } } //CFRelease(key); //CFRelease(file); return 0; } static sub_array (CFArrayRef subArray) { CFIndex count = CFArrayGetCount(subArray); CFTypeRef value; CFStringRef type; Boolean num; CFDateFormatterRef format; CFStringRef date; Boolean val; const char * v; long cfnum; int i; for (i = 0; i < count; i++) { value = CFArrayGetValueAtIndex(subArray, i); type = CFCopyTypeIDDescription(CFGetTypeID(value)); if (CFStringCompare(type, CFSTR("CFArray"), 0) == 0) { sub_array ((CFArrayRef)value); } if (CFStringCompare(type, CFSTR("CFBoolean"), 0) == 0) { num = CFBooleanGetValue(value); printf("%d\n", num); } if (CFStringCompare(type, CFSTR("CFDate"), 0) == 0) { format = CFDateFormatterCreate(NULL, NULL, kCFDateFormatterShortStyle, kCFDateFormatterShortStyle); CFDateFormatterSetFormat(format, CFSTR("yyyy-MM-dd HH:mm:ss Z")); date = CFDateFormatterCreateStringWithDate(NULL, format, value); v = CFStringGetCStringPtr(date, kCFStringEncodingMacRoman); printf("%s\n", v); } if (CFStringCompare(type, CFSTR("CFNumber"), 0) == 0) { val = CFNumberGetValue((CFNumberRef)value, kCFNumberLongType, &cfnum); printf("%d\n", cfnum); } if (CFStringCompare(type, CFSTR("CFString"), 0) == 0) { v = CFStringGetCStringPtr(value, kCFStringEncodingMacRoman); printf("%s\n", v); } } //CFRelease(type); //CFRelease(date); return 0; } // unsigned char * c = CFStringGetCStringPtr(type, kCFStringEncodingMacRoman); // if (c) { // printf("%s\n", c); // } // if (print_key) // CFShow(print_key); // CFRelease(print_key); // CFIndex count = MDQueryGetResultCount(query); // for (i = 0; i < count; i++) { // MDItemRef item = MDQueryGetResultAtIndex(query, i); // }