Подтвердить что ты не робот

Как получить временный каталог по умолчанию в Mac OS X?

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

Я мог бы просто создать subdir под /tmp, я полагаю, но я не хочу делать предположение о том, как кто-то создал свою собственную машину.

Я планирую написание тестовых данных "на лету", поэтому я хотел бы поместить их во временный каталог.

4b9b3361

Ответ 1

Оглядываясь назад на этот вопрос и документацию для NSTemporaryDirectory(), если вы используете 10.6 или выше, вам рекомендуется использовать URLForDirectory:inDomain:appropriateForURL:create:error: из NSFileManager для более гибкого метода создания каталогов.

И он возвращает URL-адрес вместо строкового пути, что является еще одной рекомендацией, которую мы рекомендуем использовать.

Ответ 2

Не используйте tmpnam() или tempnam(). Они небезопасны (подробнее см. справочная страница). Не принимайте /tmp. Используйте NSTemporaryDirectory() в сочетании с mkdtemp(). NSTemporaryDirectory() даст вам лучший каталог для использования, однако он может вернуться nil. Я использовал код, похожий на этот:

NSString * tempDir = NSTemporaryDirectory();
if (tempDir == nil)
    tempDir = @"/tmp";

NSString * template = [tempDir stringByAppendingPathComponent: @"temp.XXXXXX"];
NSLog(@"Template: %@", template);
const char * fsTemplate = [template fileSystemRepresentation];
NSMutableData * bufferData = [NSMutableData dataWithBytes: fsTemplate
                                                   length: strlen(fsTemplate)+1];
char * buffer = [bufferData mutableBytes];
NSLog(@"FS Template: %s", buffer);
char * result = mkdtemp(buffer);
NSString * temporaryDirectory = [[NSFileManager defaultManager]
        stringWithFileSystemRepresentation: buffer
                                    length: strlen(buffer)];

Теперь вы можете создавать файлы внутри temporaryDirectory. Удалите NSLogs для производственного кода.

Ответ 3

В Objective-C вы можете использовать NSTemporaryDirectory().