Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 写入文件Xcode MacOS_Objective C_Macos_Io_File Permissions - Fatal编程技术网

Objective c 写入文件Xcode MacOS

Objective c 写入文件Xcode MacOS,objective-c,macos,io,file-permissions,Objective C,Macos,Io,File Permissions,我无法运行将pid写入文件的这段代码 NSString *text = [NSString stringWithFormat:@"%d\n", getpid()]; NSError *error = nil; if (![text writeToFile:@"/tmp/Frontend.pid" atomically:YES encoding:NSUTF8StringEncoding error:&error]) { NSLog(@"Cannot write PID file

我无法运行将pid写入文件的这段代码

NSString *text = [NSString stringWithFormat:@"%d\n", getpid()];
NSError *error = nil;

if (![text writeToFile:@"/tmp/Frontend.pid" atomically:YES encoding:NSUTF8StringEncoding error:&error]) {
    NSLog(@"Cannot write PID file %@: %@", @"/tmp/Frontend.pid", error);
    return NO;
}
这就是我得到的错误

2017-11-13 20:19:18.742171+0530 TestThread[7648:273326]无法写入PID文件/tmp/Frontend.PID:Error Domain=nscoaerrordomain Code=513“您无权将文件“Frontend.PID”保存在文件夹“tmp”中”。“UserInfo={NSFilePath=/tmp/Frontend.PID,NSUnderlyingError=0x6040000432a0{Error Domain=NSPOSIXErrorDomain Code=1”“不允许操作”}


我已将目录的权限更改为777,但它仍然没有足够的权限。请帮助。

/tmp是macOS上/private/tmp的符号链接。您是否更改了链接或目标的权限

例如,在我的机器上,我看到以下内容:

$ ls -ld /tmp
lrwxr-xr-x@ 1 root  wheel  11 Oct 14 14:55 /tmp -> private/tmp
$ ls -ld /private/tmp
drwxrwxrwt  16 root  wheel  512 Nov 13 06:43 /private/tmp
这意味着只有root用户可以修改链接,但任何人都应该能够写入该目录。事实上,我可以在该目录中写入文件。由于
t
粘性位,只有在/tmp(或root或wheel)中拥有文件本身的用户才能删除/重命名该文件


我将检查您在/tmp/Frontend.pid中是否还没有权限设置为无法覆盖的文件(writeToFile:atomicaly:encoding:error将覆盖现有文件).

好吧,我终于修复了它。这是xcode中一个新项目的默认配置,它破坏了整个文件io。我关闭了授权文件中的这两个旋钮,可以开始了


只是补充。在XCode10上,我按照@alDiablo的建议更改了权利

转到目标,并在功能上启用用户选择的文件作为读/写

谢谢!

收到了相同的错误(macOS 10.15.7 Catalina),我的沙盒看起来正常(用户选择的文件读/写),但仍然是错误。由于从NSData对象直接写入不是真正的“用户选择”,我决定在两者之间使用NSSavePanel。这很好。用于将NSImage另存为tiff:

NSSavePanel *savePanel = [NSSavePanel savePanel];
savePanel.title = @"Save…”;
savePanel.message = @"Saves the …”;
savePanel.allowedFileTypes = @[ @"tiff" ];
savePanel.nameFieldStringValue = @“image”;
NSModalResponse result = [savePanel runModal];
if (result == NSModalResponseOK) {            
    NSError *error;
    NSData *tiffData = [anImage TIFFRepresentation];
    BOOL success = [tiffData writeToURL:savePanel.URL options:NSDataWritingAtomic error:&error];
    if (!success) NSLog( @"%@", error);
}

我检查了。没有名称为的文件。您能运行代码段吗?是的,我运行了您的示例--修改为将NSString*路径设置为路径(在您的示例中未定义),和LoggerWarn到NSLog。它对我有效。您还有什么建议吗?我仍然面临同样的问题。您是否更改了项目中的某些设置?