ios - 在我创建的文件上运行打开时出现错误 13(权限被拒绝)(iOS)

标签 ios file error-handling

我有一个在 iOS (iPad) 上运行的简单程序,它打开一个文件,写入一些数据,关闭文件,然后尝试重新打开文件。奇怪的是,第二次打开有时会失败,返回码为 -1 和 errno 13(权限被拒绝)。如果我多次运行代码,它会交替失败和成功(模式似乎是随机的)。

下面是我正在使用的代码,谁能解释一下我做错了什么?第一次打开总是成功,写入也总是成功。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"file.txt"];

result = remove([appFile cStringUsingEncoding:NSASCIIStringEncoding]);

int fp = open([appFile cStringUsingEncoding:NSASCIIStringEncoding], O_RDWR | O_CREAT);
result = write(fp, "abc", 3);
close(fp);

fp = open([appFile cStringUsingEncoding:NSASCIIStringEncoding], O_RDONLY);
NSLog(@"fp = %i, errno = %i", fp, errno);
close(fp);

最佳答案

来自 open(2) 的联机帮助页:

The oflag argument may indicate that the file is to be created if it does
not exist (by specifying the O_CREAT flag). In this case, open requires a
third argument mode_t mode;

由于您没有指定第三个参数,它将使用一个随机值,这就是它有时会失败的原因。添加第三个参数0644,就一直有效。

关于ios - 在我创建的文件上运行打开时出现错误 13(权限被拒绝)(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14854257/

相关文章:

java - 为什么我的接口(interface)方法无法被覆盖?

ios - Swift Playground - 对类使用未实现的初始化程序 'init(size:)'

c++ - 如何使用 C++ 监视文本文件更改?难度 : No . NET

azure - Terraform databricks 实验室提供商

c# - 如何在程序启动期间使用 < 运算符 C# 加载 .dat 文件

r - 如果我提供了错误命名的参数,则会触发有用的错误

ios - 在设备上构建时出现代码签名错误

iphone - Core Data 从其 objectID 取回子类 NSManagedObject

iphone - 日期对象显示的日期为负 5 :30hr when compare to current time.

php - 我无法将 Sentry 添加到php slim