OSX Mavericks получают теги файла в программе c

Мне нужно получить теги пользователя для файла в программе c.
Мне известна команда «mdls -name kMDItemUserTags FILENAME», чтобы получить эту информацию. Но мне нужно сделать это в коде c. Есть ли способ, с помощью которого я могу получить значения напрямую, вместо запуска этой команды и анализа.

1

Решение

Вы можете сделать это через NSURL Ключ ресурса NSURLLabelColorKey который использует NSColor указать цвет.

Поэтому это не может быть сделано в C как таковой, однако вы можете написать файл реализации Objective-C с точкой входа функции C, чтобы его можно было вызывать из C (как отмечено @Alex MDC в комментариях, которые вы можете использовать CoreFoundation и делать это в C напрямую, но я бы всегда отдавал предпочтение Foundation где это возможно, так как это легче использовать при использовании ARC).

Дано NSColor используется для указания цвета, вам нужно создать struct держать значения RGB и переводить между этим struct а также NSColor сам.

Что-то вроде (не проверено):

OSXFileLabelColour.h:

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
int isSet;          // if 0 then no colour set
float r;
float g;
float b;
} LabelColour;

/* Return 1 for success or 0 for failure */
extern int getFileLabelColour(const char *filename, LabelColour *colour);

#ifdef __cplusplus
}    // extern "C"#endif

OSXFileLabelColour.m:

#import <Foundation/Foundation.h>
#import "OSXFileLabelColour"
int getFileLabelColour(const char *filename, LabelColour *colour)
{
int retval = 0;
NSURL *url = [NSURL fileURLWithPath:@(filename)];
if (url) {
NSColor *nscolor = nil;
NSError *error = nil;
if ([url getResourceValue:&nscolor
forKey:NSURLLabelColorKey
error:&error]) {
if (nscolor) {
CGFloat r, g, b, a;
[nscolor getRed:&r green:&g blue:&b alpha:&a];
colour->isSet = 1;
colour->r = r;
colour->g = g;
colour->b = b;
} else {
colour->isSet = 0;
}
retval = 1;
} else {
NSLog(@"Failed to get colour label for file '%s': %@", filename, [error localizedDescription]);
}
} else {
NSLog(@"Failed to create URL for file '%s'", filename);
}
return retval;
}
0

Другие решения


По вопросам рекламы [email protected]