【问题标题】:Mac CGDataConsumerCreateWithFilename: failed to open `.myfile.pdf' for writing: Operation not permittedMac CGDataConsumerCreateWithFilename:无法打开“.myfile.pdf”进行写入:不允许操作
【发布时间】:2014-03-19 19:07:25
【问题描述】:

我正在生成一个 PDF 文档并为用户提供将其保存到磁盘的选项。我向他们展示了一个NSSavePanel,让他们选择要保存的文件名。如果他们选择了一个已经存在的文件,它会提示他们是否确定并想要替换该文件。如果他们同意替换文件,那么我会生成 PDF 并将其写入所选的 URL。

但是,我的写入失败并出现以下错误:

CGDataConsumerCreateWithFilename: failed to open `/path/to/.myfile.pdf' for writing: Operation not permitted

我有适当的权利来写入磁盘上的文件。碍事的文件是我在之前的测试中生成的文件。在将我的文件写入该 URL 之前,我是否需要明确删除现有文件,或者有什么方法可以告诉系统它可能会覆盖现有文件?

这是我用来启动NSSavePanel 的代码(我的代码保存了他们最后选择的目录,以便以后保存时可以默认到相同的位置):

- (NSURL*) requestSaveFilenameForExtension:(NSString*)fileExtension previousSaveDirectorySettingKey:(NSString*)previousDirectorySettingKey defaultFilename:(NSString*)defaultFilename {

    NSSavePanel *panel = [NSSavePanel savePanel];
    [panel setAllowedFileTypes:[NSArray arrayWithObject:fileExtension]];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *previousSaveDirectory = [defaults stringForKey:previousDirectorySettingKey];

    if (previousSaveDirectory == nil) {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        previousSaveDirectory = [paths objectAtIndex:0];
    }

    [panel setExtensionHidden:NO];
    [panel setNameFieldStringValue:defaultFilename];
    [panel setDirectoryURL:[NSURL fileURLWithPath:previousSaveDirectory]];

    NSInteger ret = [panel runModal];
    if (ret == NSFileHandlingPanelOKButton) {
        NSString *saveDirectory = [[[panel URL] absoluteString] stringByDeletingLastPathComponent];
        [defaults setValue:saveDirectory forKey:previousDirectorySettingKey];

        return [panel URL];
    } else {
        return nil;
    }

}

这是我用来将文件写入给定 URL 的代码,它只是标准的 PDFKit -writeToURL:

PDFDocument *document = [self generateDocument];    
[document writeToURL:documentURL];

【问题讨论】:

  • 我遇到了同样的问题..有什么办法解决这个问题吗?
  • 也遇到了这个问题

标签: macos nssavepanel


【解决方案1】:

我遇到了同样的问题。 转到应用目标功能:检查 文件访问权限和访问权限为“读/写” 所有文件夹。

然后您的应用将有权在用户选择、下载、图片、音乐和电影文件夹中写入文件。不是其他文件夹。

并且推荐使用“NSSavePanel”与用户交互保存文件,这样你会得到提示,在你构建项目的时候,访问权限是否设置正确。否则,你会结束像现在这样得到错误,却不知道为什么。糟透了。。

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2021-01-18
    • 2017-04-18
    • 1970-01-01
    • 2018-06-07
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多