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

2023-12-19

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

我该怎么办呢?


更多信息:我设置了一个 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() https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man2/setxattr.2.html.

以下是写入字符串的示例调用:

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:在回答问题之前,你不需要设置悬赏吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用纯文本文件存储任意元数据 的相关文章

随机推荐

  • 尝试访问 upload.php 时,plupload 运行时返回 403 FORBIDDEN 错误

    介绍 我试图在一个可能复杂的环境中实现相对简单的事情 我想从 JavaScript 小部件上传文件 Netvibes UWA 格式 http dev netvibes com 到本地 Intranet 服务器 使用plupload jQue
  • 使用反射C#获取JsonProperty属性的名称

    我有一个关于 JsonProperties 的课程 public class MyClass JsonProperty Editor 1 public string Editor get set 我想避免在我的代码中出现魔术字符串 但我需要
  • 可以合并多个输入,每个输入都使用不同来源的 typeahead.js 吗?

    我有一个包含大量文本输入的表单 我想将其中 10 个文本输入与 Bloodhound 一起使用 typeahead js 我让它适用于其中的两个 它们都包括预取和远程数据源 但是 typeahead Bloodhound 的每个实例都有相当
  • 如何使用 Highcharts Drupal 7 模块

    如何使用 Highcharts Drupal 7 模块 我尝试使用视图集成 但设置不可用 但我看到了一个图像http drupal org files views settings png http drupal org files vie
  • Javascript、HTML 和 onClick - 函数未定义

    我正在尝试用 Javascript 制作一个指向富文本编辑器的 插入链接 按钮 基本上 它要做的就是将以下代码添加到其内容中 a href linkGoesHere textGoesHere a 问题是 someJSFunction 当用户
  • 如何使这个线程安全

    我有以下用于 Fluent NHibernate 的 SessionFactory 我收到一个错误 创建 SessionFactory 时使用了无效或不完整的配置 带有 InnerException 的 已添加具有相同密钥的项目 这个问题只
  • 通过添加当前电脑名称来批量重命名电脑

    背景 我作为分包商将数千台计算机从 xp 迁移到 7 这些计算机位于域中 我们拥有在域中添加 修改和删除计算机的管理员权限 当我们第一次接触xp机器时 我们必须在名称前面添加 delete 并重命名 例如 旧名称 pc12345 新名称 d
  • XSLT:包含()多个字符串

    我在 XSLT 中有一个名为variable name我想设置为1 如果相关产品具有名称为 A 或 B 或同时具有 A 和 B 的属性
  • Firestore:授予权限的交易被拒绝

    我们正在访问火库来自我们的 Java 应用程序引擎实例 非事务性请求成功成功 但事务性请求失败并出现错误 firestore PERMISSION DENIED Missing or insufficient permissions 交易示
  • 根据 LatLng 列表计算总距离

    我使用 dart flutter 和 package latlong latlong dart 将 GPX 文件解析为 LatLng 对象列表 这工作正常 但下一步是找到路线的总距离 这里的问题是 如何从 LatLng 对象列表中获取总距离
  • Windows Phone 8 应用程序中的应用内购买有限制吗?

    我们发布了 WP8 应用程序 用于使用应用程序内购买来购买杂志 报纸 我们为每一期创建了单一应用内购买 一些订阅和 10 包应用内购买WP Store 中为该应用定义了 134 个应用内购买 问题是 CurrentApp LoadListi
  • Flutter:pub 已完成,退出代码为 255

    我正在通过构建运行器 json 模型和 json 可序列化为我的 flutter 应用程序制作模型 但我收到了这个错误 Unhandled exception RangeError index Invalid value Valid val
  • 这段代码是否正确(数字加数字,然后打印结果)

    我想用汇编语言做一些简单的事情 两个数字相加 并将结果打印在屏幕上 我做了那个代码 Model SMALL Stack 100h Code start MOV ax 10 ADD ax 5 MOV ah 02h INT 21h MOV ah
  • 如何在 JSP 中导入我的导入内容?

    我所有的 JSP 顶部都有这个
  • 在 iPhone 上将整个 pdf 页面解析为 NSString

    我一直在尝试将 pdf 页面的文本解析为 NSString 一段时间 我唯一能找到的是搜索特定字符串值的方法 我想做的是解析单页 PDF 而不使用任何外部库 如 PDFKitten PDFKit 等 如果可能的话 我希望将数据存储在 NSA
  • 当 fit_intercept=False 时,为什么 Sklearn R 平方与 statsmodels 不同?

    我正在使用 Sklearn 和 statsmodels 执行线性回归 我知道 Sklearn 和 statsmodels 会产生相同的结果 如下所示 Sklearn 和 statsmodels 得到了相同的结果 但即使截距为零时系数相同 结
  • 更新 NSWindow 内容大小以适合 SwiftUI 视图

    我有一个 SwiftUI 视图 由于可变长度字符串 例如由于本地化 它不知道大小 我需要包含NSWindow调整大小以修复内容 我可以提供固定 最小宽度 使用 AppKit 委托创建新的 Mac 应用程序会产生一个相当简单的 AppDele
  • java 中的可选数据异常

    package com n import java io FileInputStream import java io FileOutputStream import java io IOException import java io O
  • 限制 DevExpress TextEdit 和 MemoEdit 控件的输入长度

    我有一个项目 其中包含一些第三方控件 我的表单中有一个 TextEdit 和一个 MemoEdit 我想限制用户可以输入的字符数 您可以等待最新版本 但有一些解决方法 例如屏蔽 辅助属性和 或文本更改事件的字符计数 以下是一些解决方法的链接
  • 使用纯文本文件存储任意元数据

    我正在编写一个文本编辑器 我需要在应用程序保存的每个文件中存储一些信息 通常只是几个字符串 存储不需要特别耐用 而不是文本文件的一部分 因为其他应用程序可能会读取它 并且该信息仅特定于我的应用程序 我该怎么办呢 更多信息 我设置了一个 NS