如何在 Elixir 中查找默认用户目录

How Can I Find Default User Directories in Elixir

在许多编程语言中,有一个库调用(基础包的一部分或外部模块)来定位用户的主目录、文档目录、配置目录等,这不是平台-具体的。作为我最近用于另一种语言的例子,Rust 有“dirs”。有等效的 Elixir 吗?

例如,我 运行 我本地机器上的一个服务器来处理一些任务,最近为它写了一个客户端---一个发送 TCP 请求并获得响应的简单控制台应用程序-- -在长生不老药中。如果文件存在,我想从现有配置文件中提取端口号,以便该值不是硬编码的。我当然可以做这样的事情。

Path.join(System.user_home!(), ".config")

我想 System.user_home() 本身就是一个开始,但还不够。例如,它会在 Windows 机器上惨败。

在网络上搜索了大量非 Elixir 语言的示例,在 Elixir 中搜索当前目录以查找文件的方法,以及如何充分利用 Phoenix 项目中的 config 目录,但仅获取配置(或类似)目录我什么也看不到。

因此,假设这已经完成(考虑到 Elixir 的成熟程度,我不得不假设它已经完成),当前检索用户配置文件夹的方法是什么?

不完全是 Elixir,但有 Erlang 函数 - filename:basedir/{2,3}

该函数将目录的类型作为第一个参数,它是以下原子之一:

  • user_cache
  • user_config
  • user_data
  • user_log
  • site_config
  • site_data

并将应用程序名称(也作为 atom)作为第二个参数。

第三个参数可能是包含以下内容的地图:

  • os - OS 用于创建路径的类型,有 3 个可识别的值 - windowsdarwin (macOS) 和linux(将使用 XDG Base Directory Spec)。任何其他值将被视为 linux。如果未提供,则 os:type/0 调用会自动检测到 OS。
  • author - 仅用于 Windows
  • version - 仅用于 Windows