2012-03-05 92 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

相關問題