我正在尝试使用以下代码在文件头中写入一些数据(数据长度为 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);
Run Code Online (Sandbox Code Playgroud)
当我尝试阅读它时,结果有所不同:
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);
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何才能完成这项工作吗?提前致谢。
这是一个方便的NSFileManager 类别,它获取和设置 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3203 次 |
| 最近记录: |