我正在尝试将 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 NSString或of NSURL ,或the equivalent function for CFURL ,将子路径附加到其上。
但是,请不要将文件放入我的主文件夹的顶层,除非我(作为用户)告诉您这样做。
- 如果您想根据用户的请求保存文件,请运行 save panel ,然后将其保存在用户告诉您的位置。
- 如果您想保存首选项文件,您可能应该使用 NSUserDefaults或CFPreferences ,而不是自己处理 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/