0

我的 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;
4

1 回答 1

0

我发现在对 fileWrapperOfType_error 的调用中保留来自 initDirectoryWithFileWrappers 的文件包装器会导致问题。现在,每次使用 initWithURL_options_error 或 initDirectoryWithFileWrappers 保存文档时,我都会初始化一个新的 NSFileWrapper 实例。

但是,即使我对目录 0777 进行了 chmod,我也无法修改 Finder 中的文档包内容,这仍然是一个问题。也许它对这些文件施加了一些特定于 Finder 的限制。

于 2013-08-09T13:25:23.950 回答