首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MacOS -如何更改系统临时文件夹(以编程方式)?

MacOS -如何更改系统临时文件夹(以编程方式)?
EN

Stack Overflow用户
提问于 2009-11-19 03:30:38
回答 1查看 2.9K关注 0票数 1

我们需要更改多平台应用程序的默认系统临时文件夹。

获取系统临时文件夹的系统默认调用应返回我们指定的文件夹。在MS-Windows上,这是GetTempPath()。在MacOS上,这个函数应该叫做NSTemporaryDirectory()

我们需要这样做,因为我们同时运行应用程序的多个实例。有些第三方库使用存储在系统临时文件夹中的非唯一临时文件名。

对于Microsoft Windows和Unix平台,我们已经有了解决方案:

代码语言:javascript
运行
复制
   Microsoft Windows:

        setenv("TMP", myOwnTempFolder);
        tmpFolderToUse=GetTempPath(); // use WinOS API call


   Unix:

         setenv("TMPDIR", myOwnTempFolder);
         tmpFolderToUse = getenv("TMPDIR");

但这不适用于MacOS(X)。

代码语言:javascript
运行
复制
   MacOS:

         setenv("TMPDIR", myOwnTempFolder);
         tmpFolderToUse = NSTemporaryDirectory(); // use MacOS API call

调用NSTemporaryDirectory()之后总是返回默认路径(就像没有设置不同的文件夹一样)。

我尝试调用setenv("...")使用TMPDIR,TEMP,TEMPDIR和TMP -但在MacOSX上没有运气。

需要说明的是:这里有一个多实例伪代码示例,它当前是为我们的应用程序的Windows OS风格实现的:

instance1:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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上实现相同的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-19 12:47:15

NSTemporaryDirectory()使用confstr(_CS_DARWIN_USER_TEMP_DIR),而不是$TMPDIR。我不知道有什么API来设置confstr(3)s,所以我想你需要用DYLD_INSERT_LIBRARIES或者类似的机制覆盖NSTemporaryDirectory或者confstr$UNIX2003

但实际上,这是一个巨大的技巧;如果不是这样,您的应用程序不应该假设它是在临时目录中运行的唯一实例。它应该用mkdtemp(3)或类似的东西来做自己的唯一性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1758460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档