#include #include int sub_array (CFArrayRef subArray); int main_array (CFStringRef file); int main (int argc, const char * argv[]) { int count; CFStringRef file; if (argc > 1) { for (count = 1; count < argc; count++) { //printf("argv[%d] = %s\n", count, argv[count]); file = CFStringCreateWithFileSystemRepresentation(NULL, argv[count]); if(file); main_array (file); CFRelease(file); } } else { printf("The command had no other arguments.\n"); } return 0; } int main_array (CFStringRef file) { CFStringRef key, type, date; CFDateFormatterRef format; const char *k, *v; Boolean num, val; CFTypeRef value; long cfnum; int i; //CFStringRef file = CFStringCreateWithFileSystemRepresentation(NULL, filename); //CFStringRef file = CFSTR("/Users/forest/Desktop/Pic.jpg"); MDItemRef item = MDItemCreate(NULL, file); if(!item) { printf("File does not exist.\n"); return 0; } CFArrayRef attributeNames = MDItemCopyAttributeNames(item); CFIndex count = CFArrayGetCount(attributeNames); for (i = 0; i < count; i++) { key = CFArrayGetValueAtIndex(attributeNames, i); k = CFStringGetCStringPtr(key, kCFStringEncodingMacRoman); printf("%s ", k); value = MDItemCopyAttribute(item, key); 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); } } return 0; } int sub_array (CFArrayRef subArray) { CFDateFormatterRef format; CFStringRef type, date; Boolean num, val; CFTypeRef value; const char * v; long cfnum; int i; CFIndex count = CFArrayGetCount(subArray); for (i = 0; i < count; i++) { value = CFArrayGetValueAtIndex(subArray, i); type = CFCopyTypeIDDescription(CFGetTypeID(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); } } return 0; } #pragma mark - #pragma mark DB Callbacksstatic pascal // 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); // }