对我创建的文件(iOS)运行open时出现错误13(权限被拒绝)

对我创建的文件(iOS)运行open时出现错误13(权限被拒绝),ios,file,error-handling,Ios,File,Error Handling,我在iOS(iPad)上运行了一个简单的程序,它打开一个文件,写入一些数据,关闭文件,然后尝试重新打开文件。奇怪的是,第二次打开有时会失败,返回代码为-1和errno 13(权限被拒绝)。如果我多次运行代码,它将交替失败和成功(模式似乎是随机的) 下面是我使用的代码,有人能解释我做错了什么吗?第一次打开总是成功,写入也总是成功 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomai

我在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);
从打开(2)的手册页:


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

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

chmod 0760 "dir"

O|u RDWR | O|u CREAT
打开的第一个窗口每次都有效吗?如果((fp=open(..)!=-1){}或者{NSLog(errno)},你能把它改成
吗?你也能输出完整的文件名吗?是的,我验证了第一个打开的文件是否工作正常。完整文件名为:/var/mobile/Applications/AF7710BE-48C4-45F9-B749-E010AED330DE/Documents/file.txt从打开的手册页:
oflag参数可能表示如果文件不存在,将创建该文件(通过指定O_CREAT标志)。在这种情况下,open需要第三个参数mode\u t mode。由于没有指定第三个参数,它将使用随机值,这就是它有时失败的原因。添加第三个参数
0644
,则它将始终有效。谢谢,成功了!如果你愿意的话,请随便回答,我会接受的。
chmod 0760 "dir"