1

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

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

因为我知道有人会建议它,所以我不想使用 '/tmp' 或 '%TEMP% 或 java system property java.io.tmpdir。这些目录是系统范围的。我也非常有兴趣找到平台标准或平台认可的方法,而不是仅仅找到一个可行的解决方案。

我正在尝试为各种平台收集这些文件的位置列表。以下是我到目前为止所拥有的,但我非常感谢其他平台和/或对我已经找到的内容的验证。

4

3 回答 3

2

在 Mac OS X 上,您有几个选择:

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

您也可以使用 ~/Library/Caches/CompanyOrProductName。系统不会自发清除它,但它不会包含在 Time Machine 备份中,用户可以随意对其进行核对。

您不应该使用 ~/Library/CompanyName。也许您在考虑 ~/Library/Application Support/CompanyName?这可能是合适的,但通常不适用于临时的东西。

于 2012-04-08T08:46:04.687 回答
2
  • 如果您正在运行 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.

于 2012-04-09T05:31:25.113 回答
0

这是我找到的最好的清单。如果您有任何更正/建议,请告诉我。

在 Windows 上:

  1. 在“本地应用数据”目录中创建目录“CompanyName”。通过以下方式查找:

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

      reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Local AppData
      

在 MacOSX 上:

  1. $TMPDIR或可可函数NSTemporaryDirectory()
    • 每三天自动清零
  2. mkdir -m 700 ~/Library/Caches/CompanyOrProductName
    • 不会被系统自动删除(适合我的用例)
    • 没有 TimeMachine 支持
  3. mkdir -m 700 ~/Library/Application Support/CompanyOrProductName
    • 不会被系统自动删除(适合我的用例)
    • 由 TimeMachine 支持

在 Linux 上:

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

在 Solaris/OpenSolaris 上:

  1. ?

参考:

  • Cocoa with Love解释了上面的三个 MacOSX 选项,还讨论了几个安全问题。
于 2012-11-06T21:41:37.663 回答