gpt4 book ai didi

c++ - OSX Mavericks 在 C 程序中获取文件的标签

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:20 26 4
gpt4 key购买 nike

我需要在 C 程序中获取文件的用户标签。我知道“mdls -name kMDItemUserTags FILENAME”命令可以获取此详细信息。但我需要用 C 代码来做。有什么方法可以直接获取值而不是运行此命令和解析。

最佳答案

您可以通过 NSURL Resource Key NSURLLabelColorKey 来实现,它使用 NSColor 来指定颜色。

因此它不能在 C 本身 中完成,但是您可以编写一个带有 C 函数入口点的 Objective-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;
}

关于c++ - OSX Mavericks 在 C 程序中获取文件的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com