我的 NSDocument 子类使用捆绑文档类型,它使用 fileWrapperOfType:error: 将数据写入磁盘。这完美地工作,但最终它将开始保存具有乱码名称的文件,例如“2_ #$!@%!# _info.plist”,而不是覆盖正确的文件。
我不知道导致问题的更改是什么,但我认为它与权限相关,因为即使“stat”返回所有者可写的“drwxr-xr-x”,Finder 也不允许我在包中写入。
NSFileWrapper 或 NSDocument 是否弄乱了权限或什么?我是这个 API 的新手,但这是我在下面使用的代码(在 Objective Pascal 中),希望所有人都能阅读。
function TScriptDocument.fileWrapperOfType_error (typeName: NSString; outError: NSErrorPtr): NSFileWrapper;
var
fileWrappers: NSDictionary;
propertiesFileWrapper: NSFileWrapper;
data: NSData;
propertiesName: NSString;
begin
if documentFileWrapper = nil then
documentFileWrapper := NSFileWrapper.alloc.initDirectoryWithFileWrappers(nil);
fileWrappers := documentFileWrapper.fileWrappers;
propertiesName := NSSTR('info.plist');
propertiesFileWrapper := fileWrappers.objectForKey(propertiesName);
if propertiesFileWrapper <> nil then
documentFileWrapper.removeFileWrapper(propertiesFileWrapper);
data := NSPropertyListSerialization.dataWithPropertyList_format_options_error(script.GetProperties, NSPropertyListXMLFormat_v1_0, 0, nil);
if data <> nil then
documentFileWrapper.addRegularFileWithContents_preferredFileName(data, propertiesName);
result := documentFileWrapper;
end;