нам нужно изменить папку SYSTEM temp по умолчанию для нашего многоплатформенного приложения.MacOS - как изменить папку SYSTEM temp (программно)?
Системный вызов по умолчанию для получения папки SYSTEM temp должен возвращать указанную папку. В MS-Windows это GetTempPath(). На MacOS функция называется NSTemporaryDirectory(), я думаю.
Нам нужно сделать это, потому что мы одновременно запускаем несколько экземпляров нашего приложения. Существуют некоторые сторонние библиотеки, в которых используются неспецифические временные имена файлов, хранящиеся в папке tems SYSTEM.
для Microsoft Windows и Unix платформ у нас уже есть решение:
Microsoft Windows:
setenv("TMP", myOwnTempFolder);
tmpFolderToUse=GetTempPath(); // use WinOS API call
Unix:
setenv("TMPDIR", myOwnTempFolder);
tmpFolderToUse = getenv("TMPDIR");
, но это не работает для MacOS (X).
MacOS:
setenv("TMPDIR", myOwnTempFolder);
tmpFolderToUse = NSTemporaryDirectory(); // use MacOS API call
Вызова NSTemporaryDirectory() всегда возвращает путь по умолчанию после этого (как без установки другой папки).
Я попытался вызвать setenv («...») с TMPDIR, TEMP, TEMPDIR и TMP - но не повезло с MacOSX.
Для уточнения: здесь несколько экземпляров псевдокод пример, как он в настоящее время реализован для ароматизатора ОС Windows нашего приложения:
instance1:
tmp=GetTempPath(); // -> 'C:\User\testing\temp'
uuid=getUUID(); // -> 'd7c5df40-d48d-11de-8a39-0800200c9a66'
setenv("TMP", tmp + uuid);
tmp=GetTempPath(); // --> 'C:\User\testing\temp\d7c5df40-d48d-11de-8a39-0800200c9a66'
instance2:
tmp=GetTempPath(); // -> 'C:\User\testing\temp'
uuid=getUUID(); // -> '435aeb10-d48e-11de-8a39-0800200c9a66'
setenv("TMP", tmp + uuid);
tmp=GetTempPath(); // --> 'C:\User\testing\temp\435aeb10-d48e-11de-8a39-0800200c9a66'
Любые советы о том, как добиться такого же поведения на MacOS, будут очень изрезаны.
Зачем вам это нужно? – ceejayoz
Поскольку у вас есть определенный справочник, вы можете просто использовать это, а не вызывать NSTemporaryDirectory? – Jeff
нет, к сожалению нет. В нашем приложении используются некоторые сторонние библиотеки, и эти сторонние библиотеки вызывают NSTemporaryDirectory(), чтобы получить временную папку SYSTEM – 2009-11-18 19:42:34