Objective c 写入文件Xcode MacOS
我无法运行将pid写入文件的这段代码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
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。它对我有效。您还有什么建议吗?我仍然面临同样的问题。您是否更改了项目中的某些设置?