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

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

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

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

17.12.2008 12:42:54
Также обратите внимание, что / tmp недоступен в процессе, работающем в изолированной среде (с использованием обычных правил песочницы, как в чем-то, распространяемом через Mac App Store)
tml 29.08.2013 10:00:26
4 ОТВЕТА

Используйте функции tempnam (), tmpnam () или tmpfile () .

5
17.12.2008 12:47:46
tempnam () и tmpnam () небезопасны. Вместо этого используйте mkstemp ().
Dave Dribin 17.12.2008 14:09:12
Возможно нет, но по крайней мере я узнал о TEMPDIR
Abizern 17.12.2008 17:48:44

Не используйте 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для производственного кода.

39
17.12.2008 14:25:21

In Objective-C you can use NSTemporaryDirectory().

6
17.12.2008 18:35:27
РЕШЕНИЕ

Looking back at this question there and the documentation for NSTemporaryDirectory(), if you are using 10.6 or above, then you are recommended to use the URLForDirectory:inDomain:appropriateForURL:create:error: method from NSFileManager for a more flexible method of creating directories.

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

8
21.03.2012 22:43:33
как и где именно вы получаете временный каталог. Кажется, есть некоторые проблемы с API NSItemReplacementDirectory. NSHipster опубликовал : На самом деле, этот метод, по-видимому, предназначен для перемещения существующих временных файлов в постоянное место на диске с-replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:.
dreamlab 8.02.2015 23:21:50