Как получить временный каталог по умолчанию в Mac OS X?
Я хотел бы создать некоторые каталоги данных для некоторых модульных тестов, и я бы хотел, чтобы эти каталоги находились в временном каталоге по умолчанию для пользователя.
Я мог бы просто создать subdir под /tmp, я полагаю, но я не хочу делать предположение о том, как кто-то создал свою собственную машину.
Я планирую написание тестовых данных "на лету", поэтому я хотел бы поместить их во временный каталог.
Ответы
Ответ 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().
Ответ 4
Используйте функцию tempnam(), tmpnam() или tmpfile().