iOS: «открыто: разрешение запрещено» - PullRequest
2 голосов
/ 06 марта 2012

Прежде всего, извините за мой английский. Это мой первый вопрос здесь. Я прочитал множество решений как распространенных, так и необычных проблем в работе со стековым потоком, и сообщество стековых потоков IMO является самым надежным в отрасли.

В настоящее время я занимаюсь разработкой приложения для 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;
}

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

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

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

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

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

0 голосов
/ 06 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...