4

假设我正在编写一个程序,并且我希望它遵循 XDG 基本目录规范来放置其文件(应用程序foo用作$XDG_CONFIG_HOME/foo配置文件的目录,如果XDG_CONFIG_HOME设置为非空白,或~/.config/foo,或失败并出现错误如果主目录甚至无法解析)。

XDG_CONFIG_HOME对于例如设置且非空白但该目录不存在的情况是否存在正确/指定的行为?或者如果没有这样的变量,并且~/.config不存在?是否期望我的程序尝试创建它?或者该目录的不存在是否被认为是环境/系统部分的错误,我的程序应该避免对此做任何事情(只是保释错误)?

注意:我不是在问我是否应该创建~/.config/foo- 显然这是肯定的;我在问我是否应该创建~/.config自己,如果它不存在。

(更迂腐:显然一些程序应该创建它们 - 问题是这样做是否仅仅是系统/桌面/用户的工作,或者是否有任何程序应该尝试创建相关目录,如果它们不存在?)

我试过阅读XDG Base Directory Specification,它说在尝试写入文件时,程序可能会创建必要的目录,但不清楚这是否仅指应用程序的特定/“个人”子目录XDG 基本目录,或者如果这意味着 XDG 基本目录本身。

PS 通常我很清楚要使用什么标签,但在这里我真的不确定:请编辑这篇文章或提出改进建议,给它适当的标签。

4

2 回答 2

3

来自XDG 基本目录规范

如果在尝试写入文件时目标目录不存在,则应尝试使用权限 0700 创建它。如果目标目录已存在,则不应更改权限。应用程序应该准备好处理无法写入文件的情况,因为目录不存在并且无法创建,或者由于任何其他原因。在这种情况下,它可能会选择向用户显示错误消息。

我会解释这一点,因此应用程序应尝试创建 XDG 基本目录(或目标所需的任何目录),并且仅在无法创建时才显示错误。

于 2019-11-11T14:52:51.710 回答
1

经过几年的思考,我已经确定了自己的答案:

  1. 永远不要创建非标准的基本XDG 目录,但是
  2. 自动创建标准XDG 基本目录可能没问题,并且
  3. 应该在基本目录中自动创建应用程序的任何子目录

我认为自动提供帮助可能很好,但不要加重用户的错误也很重要。

如果我写XDG_DATA_HOME=~/.locals/hare在我的环境变量配置中,我可能想要这样,但更有可能是我打错了~/.local/share. 因此,在这种情况下,最有帮助、破坏性最小和错误最少的事情就是报告缺少所请求的 XDG 基本目录。

因此,如果用户指定了自定义 XDG 基本目录,并且该基本目录不存在,则永远不要尝试创建它。不要让你的用户处于这样一种情况,例如,在他们的标准~/.config目录旁边,他们得到一个~/.configs~/.comfig目录,其中也包含他们的一些配置,直到有一天他们修复了错字,突然他们的程序表现得好像它们被重置为默认值. 在这种情况下,从长远来看,早期发现错误是最有帮助的事情,因此请立即告诉用户“这不存在”。

但是,如果用户没有要求自定义基本目录,并且您将使用已知的标准位置,那么尝试自动创建它是可以的,前提是您确保仅使用合理的所有权、权限和等等

最后,当基本 XDG 目录存在时,大多数应用程序可能应该在其中创建自己的子目录,并且您绝对应该自动创建该应用程序特定目录以及该目录中的任何其他子目录。

于 2016-04-23T08:26:52.967 回答