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

时间:2013-02-13 13:04:02

标签: ios file error-handling

我有一个在iOS(iPad)上运行的简单程序,它打开一个文件,写入一些数据,关闭文件,然后尝试重新打开该文件。奇怪的是,第二次打开有时会失败,返回码为-1,错误号为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);

2 个答案:

答案 0 :(得分:3)

从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,然后它将始终有效。

答案 1 :(得分:0)

打开的文件夹必须具有可执行权限,因此请使用:

chmod 0760 "dir"