2012-03-05 70 views
2

首先请原谅我的英文。这是我的第一个问题。我已经阅读了很多关于stackoverflow常见问题和解决方案的解决方案,而IMO stackoverflow的社区是该分支中最值得信任的。iOS:“open:Permission denied”

目前我正在开发一个iOS应用程序,最近我遇到了一个问题,并经过一些研究后,我没有找到解决方案。当我使用fopen打开现有文件,我收到以下错误:

open: Permission denied 

以下是剪掉这将导致错误的代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachePath = [paths objectAtIndex:0]; 
BOOL isDir = NO; 
NSError *error; 
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath 
              isDirectory:&isDir] && isDir == NO) { 

     [[NSFileManager defaultManager] createDirectoryAtPath:cachePath 
            withIntermediateDirectories:NO 
                attributes:nil 
                 error:&error]; 
}   

NSString* filePath = [cachePath stringByAppendingPathComponent: 
           [NSString stringWithFormat:@"tmpmem%i.bin", count++]]; 

const char *cPath = [filePath cStringUsingEncoding:NSISOLatin1StringEncoding]; 

int file = open(cPath, O_RDWR | O_CREAT); 

if (file == -1) 
{ 
    perror("open"); 
    return NULL; 
} 

我期待着您的帮助。先谢谢你。

问候, B.季米特洛夫

+0

它很难知道不知道什么是缓冲区?所有的路径应该是相对于[NSBundle mainBundle] – 2012-03-05 21:22:15

+0

我已经更新了代码片段。 – 2012-03-05 21:37:29

+0

在这一点上,我会不高兴,我对缓存目录并不熟悉。系统是否有可能对这里创建的东西拥有所有权?是否有某种文章或知识产权会让你相信这应该起作用? – 2012-03-05 23:29:47

回答

0

问题解决。我检查了文件夹的posix权限,他们是493,然后我将它们设置为975,并且所有内容都按预期工作。出现了一个新问题:由于标志是4(读),2(写)和1(执行),POSIX许可中的9意味着什么?

2

很可能是没有错,你的应用程序。此错误的常见原因包括缺少cPath命名的文件路径上的目录的搜索权限,缺少打开文件以进行读取或写入的权限(因为您请求使用O_RDWR)或者该文件不存在并且缺少写入目录的权限(因为您要求创建文件以防O_CREAT不存在)。

您应该检查文件和路径名,并确保所有必要的权限都已正确设置。

+0

是的,你可能会在你的沙箱外 – 2012-03-05 21:20:49

+0

我已更新代码以我找到可写目录的方式剪切。我能够创建文件并写入它,但是当我关闭它并尝试再次打开它时出现错误。 – 2012-03-05 21:33:58

相关问题