写入文件 Xcode MacOS
Write to a file Xcode MacOS
我无法运行这段将 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=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “Frontend.pid” in the folder “tmp”." UserInfo ={NSFilePath=/tmp/Frontend.pid, NSUnderlyingError=0x6040000432a0 {错误域=NSPOSIXErrorDomain 代码=1 "Operation not permitted"}}
我已将目录的权限更改为 777,但它仍然没有足够的权限。请帮忙
/tmp 在 macOS 上是 link 到 /private/tmp 的符号。您是否更改了 link 或目标的权限?
例如,在我的机器上我看到以下内容:
$ 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 可以修改 link,但任何人都应该能够写入该目录。事实上,我可以在该目录中写入文件。由于 t
粘滞位,只有在 /tmp(或 root 或 wheel)中拥有文件本身的用户才能 delete/rename 该文件。
我会检查您在 /tmp/Frontend.pid 处是否还没有以无法覆盖的方式设置权限的文件(writeToFile:atomically:encoding:error 将覆盖现有文件) .
好吧,我终于修好了。这是 xcode 中一个新项目的默认配置,它破坏了整个文件 io 的东西。我关闭了权利文件中的这 2 个旋钮,一切顺利。
补充一下。在 XCode10 我按照@alDiablo 的建议更改了权利。
转到您的目标,并在功能上启用用户选择的文件作为 Read/Write。
谢谢!
遇到同样的错误 (macOS 10.15.7 Catalina),我的沙箱似乎没问题(用户选择的文件 Read/Write),仍然是错误。由于从 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);
}
我无法运行这段将 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=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “Frontend.pid” in the folder “tmp”." UserInfo ={NSFilePath=/tmp/Frontend.pid, NSUnderlyingError=0x6040000432a0 {错误域=NSPOSIXErrorDomain 代码=1 "Operation not permitted"}}
我已将目录的权限更改为 777,但它仍然没有足够的权限。请帮忙
/tmp 在 macOS 上是 link 到 /private/tmp 的符号。您是否更改了 link 或目标的权限?
例如,在我的机器上我看到以下内容:
$ 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 可以修改 link,但任何人都应该能够写入该目录。事实上,我可以在该目录中写入文件。由于 t
粘滞位,只有在 /tmp(或 root 或 wheel)中拥有文件本身的用户才能 delete/rename 该文件。
我会检查您在 /tmp/Frontend.pid 处是否还没有以无法覆盖的方式设置权限的文件(writeToFile:atomically:encoding:error 将覆盖现有文件) .
好吧,我终于修好了。这是 xcode 中一个新项目的默认配置,它破坏了整个文件 io 的东西。我关闭了权利文件中的这 2 个旋钮,一切顺利。
补充一下。在 XCode10 我按照@alDiablo 的建议更改了权利。
转到您的目标,并在功能上启用用户选择的文件作为 Read/Write。
谢谢!
遇到同样的错误 (macOS 10.15.7 Catalina),我的沙箱似乎没问题(用户选择的文件 Read/Write),仍然是错误。由于从 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);
}