gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:00:29 25 4
gpt4 key购买 nike

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

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

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

对于 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() 的调用之后总是返回默认路径(就像不设置不同的文件夹一样)。

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

为了澄清:这里是一个多实例伪代码示例,它当前是为我们的应用程序的 Windows 操作系统风格实现的:

实例1:

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'

实例2:

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 上实现相同的行为?

最佳答案

NSTemporaryDirectory() 使用 confstr(_CS_DARWIN_USER_TEMP_DIR),而不是 $TMPDIR。我不知道有设置 confstr(3) 的 API,所以我认为您需要重写 NSTemporaryDirectoryconfstr$UNIX2003DYLD_INSERT_LIBRARIES或类似的机制。

但实际上,这是一个巨大的黑客攻击;如果情况并非如此,您的应用程序不应假设它是临时目录中运行的唯一实例。它应该使用 mkdtemp(3) 或类似的方法进行自己的唯一处理。

关于cocoa - MacOS - 如何更改系统临时文件夹(以编程方式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1758460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com