cocoa - 将 CFPropertyList 保存到用户文件夹

标签 cocoa macos unix

我正在尝试将 CFPropertyList 保存到用户主文件夹中的某个位置。使用下面的代码我收到 errorCode = -10(未知错误)。

CFURLRef fileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("~/testfile.txt"),  kCFURLPOSIXPathStyle, false );  

SInt32 errorCode;
Boolean status = CFURLWriteDataAndPropertiesToResource(fileURL, xmlData, NULL, &errorCode);

如果我将路径更改为“/testfile.txt”之类的内容(不带“~”),则一切正常。如何将属性列表保存到当前用户的主文件夹?是否必须先获取用户名并将其包含在/users/toffler/testfile.txt 等路径中?

最佳答案

通过基金会,您可以调用the NSHomeDirectory function获取用户主目录的绝对路径。然后您可以使用 the path-manipulation methods of NSStringof NSURL ,或the equivalent function for CFURL ,将子路径附加到其上。

但是,请不要将文件放入我的主文件夹的顶层,除非我(作为用户)告诉您这样做。

  • 如果您想根据用户的请求保存文件,请运行 save panel ,然后将其保存在用户告诉您的位置。
  • 如果您想保存首选项文件,您可能应该使用 NSUserDefaultsCFPreferences ,而不是自己处理 plist。
  • 如果您有其他原因需要保存特定于用户的文件,通常应将其放入 the chewable items folder , the Caches folder ,或首选项文件夹。我链接到的两个函数是访问这三个文件夹中这两个文件夹的最简单方法;更难的方法,也是唯一适用于这三个方法的方法是 the FSFindFolder function 。与大多数文件夹管理器不同,FSFindFolder 并未弃用,并且可在 64 位中使用。
<小时/>

2012 年更新

  • 现在,您应该使用 URL,而不是路径。 NSFileManager has a method for getting a URL to a desired directory.
  • 将路径(或文件 URL)装订在一起在沙盒应用程序中不起作用,因为您无权访问刚刚创建的路径。您需要从系统 API 获取路径(或 URL),无论是 NSFileManager、NSSavePanel 还是其他。
  • 要保存和恢复文件引用,请使用 NSURL 的安全范围书签功能。
  • NSUserDefaults 和 CFPreferences 在沙箱中按预期工作。
  • 自 10.8 起,文件夹管理器现已完全弃用。
  • 污染用户的主文件夹仍然是不礼貌的行为。

关于cocoa - 将 CFPropertyList 保存到用户文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2460068/

相关文章:

cocoa - 无法使用 GCD 调度源读取串行端口文件描述符

objective-c - 在 Mac OS X 下知道手指在触控板上的位置

macos - 如何在Macbook上安装Terragrunt 0.19.x版本

unix - unix 中的组播 IPC 选项

perl - Unix 如何读取带有两个连续斜杠的路径名? (例如/home/user//mystuff)

c++ - 从沙盒应用程序运行 clang 编译器的任何可能方法?

cocoa - 如何在Cocoa中将NSAppleEventDescriptor类型 'ldt'转换为NSDate?

cocoa - 在像 tweetie 或事物首选项这样的圆形 View 中记录键盘命令

macos - 从 Mac/OSX 连接到 FTDI 设备 - 安装驱动程序技术

c - 通过 unix ME 和计数器信号量同步系统