2012-03-05 3 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; 
} 

Я с нетерпением ждет вашей помощи. Заранее спасибо.

С уважением, Б. Димитров

+0

его трудно узнать, не знаете, что такое буфер? все ваши пути должны относиться к [NSBundle mainBundle] –

+0

Я обновил фрагмент кода. –

+0

Я буду кланяться в этом месте, я не очень хорошо знаком с каталогами Cache. Возможно ли, что система взяла на себя ответственность за вещи, созданные здесь? Есть ли какая-то статья или КБ, которые заставят вас поверить, что это должно работать? –

ответ

0

Проблема решена. Я проверил разрешения posix в папке, и они были 493, затем я установил их на 975, и все работает как ожидалось. Возникает один новый вопрос: что означает 9 в разрешениях posix, поскольку флаги - 4 (Read), 2 (Write) и 1 (Execute)?

2

Скорее всего, нет ничего плохого с приложением. Общие причины этой ошибки включают отсутствие разрешения на поиск для каталога на пути к файлу с именем cPath, отсутствие разрешения на открытие файла для чтения или записи (поскольку вы запрашиваете оба с O_RDWR) или файл не существует и разрешение на запись в каталог, в котором оно должно быть создано, отсутствует (поскольку вы запрашиваете создание файла в случае, если он не существует с O_CREAT).

Вы должны проверить файл и имя пути и убедиться, что все необходимые разрешения установлены соответствующим образом.

+0

Да, вы можете быть вне своей песочницы –

+0

Я обновил код был обломан, так как я нашел записываемый каталог. Я могу создать файл и написать ему, но когда я закрою его и попытаюсь открыть его снова, получите ошибку. –

Смежные вопросы