各种平台上的用户专用临时存储在哪里



我需要创建一个充满数据文件的目录。 这些文件是临时的用户专用文件。

虽然这些文件是临时的,如果它们被系统删除也没关系,但它们有很多,我想如果可以的话,重复使用它们。 此外,我希望其他应用程序(以同一用户身份运行)也可以访问/创建这些文件。 这意味着我需要一个可以跨不同编程语言工作的标准协议。

因为我知道有人会建议它,所以我不想使用"/tmp"或"%TEMP%"或java系统属性java.io.tmpdir。这些目录是系统范围的。 我也对寻找平台标准或平台批准的方法非常感兴趣,而不仅仅是找到有效的解决方案。

我正在尝试收集针对各种平台查找这些文件的列表。 以下是我到目前为止所拥有的,但我真的很感激其他平台和/或对我已经发现的内容的验证。

在 Mac OS X 上,您有以下几种选择:

$TMPDIR实际上是用户范围的。 它是/var/folder 中的一个目录,但是。其中,有一个特定于用户的目录层次结构。 $TMPDIR指向的特定目录不允许除用户之外的任何人读取。 这就是 Cocoa 函数NSTemporaryDirectory()返回的内容。

您也可以使用 ~/Library/Caches/CompanyOrProductName。 系统不会自发地清除它,但它不会包含在时间机器备份中,用户可以随意核弹。

您不应该使用 ~/Library/CompanyName。 也许您正在考虑~/图书馆/应用程序支持/公司名称? 这可能是合适的,但通常不适用于临时的东西。

  • 如果您正在运行 Solaris,并且不介意这些文件在操作系统重新启动时丢失,则可以将文件存储在 /tmp/.<username>-<company>/ 中并更改目录权限以保护它。
  • 如果希望这些临时文件在重新启动后继续存在,请使用 /var/tmp/.<username>-<company>/~/.<company>
  • 如果用户的主目录是远程挂载并在各种计算机之间共享的,并且您希望临时文件也以相同的方式共享,则可以使用 ~/.<company>/

当然,.username-company.company只是建议。您可以使用不会与其他应用程序和用户冲突的任何名称。

~/.<company>是迄今为止最常见的选择,例如~/.mozilla~/.openoffice.org~/.adobe~/.mysql~/.netbeans~/.thunderbird~/.VirtualBox等。

无论如何,在 Solaris 以及可能大多数其他 Unix 和 Unix 类系统上,除了主目录、/tmp/var/tmp 之外,没有其他用户可写目录由标准定义

这是我

找到的最好的列表。 如果您有任何更正/建议,请告诉我。

在视窗上:

  1. 在"本地应用数据"目录中创建目录"公司名称"。 通过以下方式找到此内容:

    1. 系统环境变量LOCALAPPDATA ,或
    2. 通过执行以下命令行查询注册表:

      reg query "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders" /v Local AppData
      

在 MacOSX 上:

  1. $TMPDIR或可可功能NSTemporaryDirectory()
    • 每三天自动清除一次
  2. mkdir -m 700 ~/Library/Caches/CompanyOrProductName
    • 系统不会自动删除(对我的用例很好)
    • 未由时间机器备份
  3. mkdir -m 700 ~/Library/Application Support/CompanyOrProductName
    • 系统不会自动删除(对我的用例很好)
    • 由时间机器备份

在 Linux 上:

  1. mkdir -m 700 ~/.company-name
在 Solaris

/OpenSolaris 上:

引用:

  • Cocoa with Love解释了上述三个MacOSX选项,并讨论了几个安全问题。

最新更新