gpt4 book ai didi

objective-c - 使用纯文本文件存储任意元数据

转载 作者:太空狗 更新时间:2023-10-30 03:31:24 24 4
gpt4 key购买 nike

我正在编写一个文本编辑器,我需要为应用程序保存的每个文件存储一些信息(通常只是几个字符串;存储不需要特别持久)(不属于其他应用程序可能会读取的文本文件,并且信息仅特定于我的应用程序)。

我该怎么做?


更多信息:我设置了一个 NSDocument,我想简单地将一个 NSString 实例变量存储为每个文件的元数据。基于下面的答案,我想出了这个,它目前存在错误并导致程序在启动时崩溃:

#import <sys/xattr.h>
@interface MyDocument : NSDocument {
NSString *metadatum;
}

@implementation MyDocument

- (BOOL)writeToURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)err
{
BOOL output = [super writeToURL:url ofType:type error:err];
if(!setxattr([[url path] cStringUsingEncoding:NSUTF8StringEncoding],
"eu.gampleman.xattrs.style",
[metadatum cStringUsingEncoding:NSUTF8StringEncoding],
sizeof(char) * [styleName length], 0, 0))
{
NSLog(@"Write failure");
}
return output;
}

- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)err {
char *output;
ssize_t bytes = getxattr([[url path] cStringUsingEncoding:NSUTF8StringEncoding],
"eu.gampleman.xattrs.style", &output, 1024, 0, 0);
if (bytes > 0) {
metadatum = [[NSString alloc] initWithBytes:output length:bytes
encoding:NSUTF8StringEncoding]; // <- crashes here with "EXC_BAD_ACCESS"
}
return [super readFromURL:url ofType:type error: err];
}

// ...
// fairly standard -dataOfType:error: and
// -readFromData:ofType:error: implementations

PS:如果你的回答真的很好(有示例代码等),我将奖励100rep。

最佳答案

使用扩展属性。参见 setxattr() .

这是一个编写字符串的示例调用:

NSData* encodedString = [theString dataUsingEncoding:NSUTF8StringEncoding];
int rc = setxattr("/path/to/your/file", "com.yourcompany.yourapp.yourattributename", [encodedString bytes], [encodedString length], 0, 0);
if (rc)
/* handle error */;

读取字符串:

ssize_t len = getxattr("/path/to/your/file", "com.yourcompany.yourapp.yourattributename", NULL, 0, 0, 0);
if (len < 0)
/* handle error */;
NSMutableData* data = [NSMutableData dataWithLength:len];
len = getxattr("/path/to/your/file", "com.yourcompany.yourapp.yourattributename", [data mutableBytes], len, 0, 0);
NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

PS:你不是必须在回答问题之前设置赏金吗?

关于objective-c - 使用纯文本文件存储任意元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10374580/

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