程序是否应该创建 XDG 文件夹



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

对于

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

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

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

我尝试阅读 XDG 基本目录规范,该规范说在尝试写入其文件时,程序可能会创建必要的目录,但目前还不清楚这是否仅指 XDG 基本目录中应用程序的特定/"个人"子目录,或者这是否适用于 XDG 基本目录本身。

附言通常我对使用什么标签有一个很好的想法,但在这里我真的不确定:请编辑这篇文章或提出改进建议以给它适当的标签。

来自 XDG 基本目录规范:

如果在尝试写入文件时,目标目录是 不存在 应尝试在获得许可的情况下创建它 0700. 如果目标目录已存在,则不应更改权限。应用程序应准备好处理 无法写入文件的情况,因为 目录不存在,无法创建,或任何其他 原因。在这种情况下,它可能会选择向 用户。

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

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

  1. 切勿创建非标准的基本 XDG 目录,但
  2. 自动创建标准 XDG 基目录可能是可以的,并且
  3. 您应该在基目录中自动创建应用程序的任何子目录

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

如果我在我的环境变量配置中编写XDG_DATA_HOME=~/.locals/hare,我可能想要这样,但更有可能的是我犯了~/.local/share的错别字。因此,在这种情况下,最有用、干扰最少、最不错误的做法是报告缺少请求的 XDG 基目录。

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

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

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

最新更新