ios - 写入扩展文件属性

标签 ios objective-c

我正在尝试使用以下代码在文件头中写入一些数据(数据长度为 367 字节):

const char *attrName = [kAttributeForKey UTF8String];
const char *path = [filePath fileSystemRepresentation];

const uint8_t *myDataBytes = (const uint8_t*)[myData bytes];
int result = setxattr(path, attrName, myDataBytes, sizeof(myDataBytes), 0, 0);

当我尝试阅读它时,结果不同:

const char *attrName = [kAttributeForKey UTF8String];
const char *path = [filePath fileSystemRepresentation];

int bufferLength = getxattr(path, attrName, NULL, 0, 0, 0);
char *buffer = malloc(bufferLength);
getxattr(path, attrName, buffer, bufferLength, 0, 0);

NSData *myData = [[NSData alloc] initWithBytes:buffer length:bufferLength];  
free(buffer);

有人能告诉我怎样才能使这项工作正常进行吗?提前致谢。

最佳答案

这是一个方便的 NSFileManager category获取和设置 NSString 作为文件的扩展属性。

+ (NSString *)xattrStringValueForKey:(NSString *)key atURL:(NSURL *)URL
{
    NSString *value = nil;
    const char *keyName = key.UTF8String;
    const char *filePath = URL.fileSystemRepresentation;

    ssize_t bufferSize = getxattr(filePath, keyName, NULL, 0, 0, 0);

    if (bufferSize != -1) {
        char *buffer = malloc(bufferSize+1);

        if (buffer) {
            getxattr(filePath, keyName, buffer, bufferSize, 0, 0);
            buffer[bufferSize] = '\0';
            value = [NSString stringWithUTF8String:buffer];
            free(buffer);
        }
    }
    return value;
}

+ (BOOL)setXAttrStringValue:(NSString *)value forKey:(NSString *)key atURL:(NSURL *)URL
{
    int failed = setxattr(URL.fileSystemRepresentation, key.UTF8String, value.UTF8String, value.length, 0, 0);
    return (failed == 0);
}

关于ios - 写入扩展文件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16400288/

相关文章:

ios - View Controller 上缺少导航栏

SceneKit 中的 iOS 自定义几何

ios - Swift 函数的默认结果

ios - 将数据从 tableview controller 传递到 view controller,但它显示为 null

objective-c - 简单 NSPredicate @"1 == 0"不过滤获取的结果?

iOS IBOutlet 非零,不知何故被清除为零

ios - 处理 CAKeyFrameAnimation 的正确方法

objective-c - 等同于 Objective C 中的 Swift 的 .map?

objective-c - 如何使 SLTextField 可点击?

ios - UITapGestureRecognizer 中的 Objective c mkmapview 如何测试他们是否点击了注释