OSX Mavericks在c程序中获取文件的标签
OSX Mavericks get tags of a file in c program
我需要在c程序中获得文件的用户标签。我知道"mdls -name kMDItemUserTags FILENAME"命令来获取此详细信息。但我需要做它在c代码。是否有任何方法可以直接获得值,而不是运行此命令并解析。
您可以通过NSURL
资源键 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;
}
相关文章:
- 获取文件数据预处理器宏
- 如何在Windows内核中获取文件大小
- 从 C 中的变量获取文件的路径,C++
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 如何使用 jpeglib.h 获取文件是否为 JPEG 类型
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- 如何用C++部分地获取文件中的行
- 使用内置的Windows方法获取文件夹的内容
- 在 Apache Velocity 模板语言中获取文件目录
- 如何在C#或C++中获取文件或文件夹的有效权限?有什么 API 吗?
- 对字符求和并减去以获取文件
- 从 FutureAccessList 同步获取文件夹路径
- 通过HTTPS从POCO StreamCopier获取文件下载进度
- 如何使用C 17获取文件大小
- getline 无法获取文件的第一行
- 如何使用 Win API 获取文件夹中的文件列表(带过滤器)
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- HttpQueryInfo 获取文件大小
- 通过文件资源管理器获取文件夹目录