问题描述 投票:0回答:1
XDG的目录
。 由于我希望库在Windows上也可以使用(用于跨平台程序),因此,当XDG环境变量不设置时,我将其使用标准的Windows Directories作为默认值。 我目前正在使用以下内容:

$XDG_DATA_HOME=%LOCALAPPDATA%

    $XDG_DATA_DIRS
  • =
    %APPDATA%
  • $XDG_CONFIG_HOME
  • =
    %LOCALAPPDATA%
  • $XDG_CONFIG_DIRS
  • =
    %APPDATA%
  • $XDG_CACHE_HOME
  • =
    %TEMP%
  • $XDG_RUNTIME_DIR
  • =
    %TEMP%
    
    
    我的问题是,是否有比那些更好的默认值。  我知道
  • %TEMP%
  • 是错误的,因为它确实应该放在像
    $XDG_RUNTIME_DIR
    这样的ramf上,但是我不知道窗口上有任何目录。 在Windows中,似乎没有一个不错的选择,可以将数据和配置目录分开,因此我为它们使用相同的目录。 我的直觉是,
    /tmp
    是可写的
  • %LOCALAPPDATA%
变量的更好选择,并且在要读取的列表中具有“漫游”配置,通常不会被覆盖。 但是,具有漫游配置的公司Windows用户会发现奇怪而不同意吗?

我已经在
jvm
rust的库中实现了此类功能。这是我学到的:
with应用程序名称,因为您的用户无法或不会。
提供计算
full
路径(包括应用程序名称!)的API到配置,缓存等目录。不执行此操作将导致代码在3个主要平台中至少有2个是错误的,因为公约差异很大。
Consiss Ins Company
Megacorp
(Web地址
Megacorp.co.uk

)名为
linux windows filepath fhs
1个回答
41
投票
的应用程序。 在Linux下,命名应用程序的路径段应为

$XDG_*_HOME(较低,没有空格),在窗口上应该是$XDG_*_DIRS(请注意two

文件夹),在MacOS上应该是

fooapp/

(无效的字符替换为

MegaCorp\Foo App\)。 每个目录的目的是明确的。 例如,我的库在MacOS或Windows上不提供

uk.co.MegaCorp.Foo-App

,因为-与e有很大不同。 g。 runtimeDir在Windows上 这是安全问题的潜在来源,因为Linux上的运行时DIR保证只有所有者才能访问它,在用户注销时会删除。 ,我也只提供Linux和MacOS。 Windows确实具有字体目录,但是与Linux和MacOS不同,它不是用户所做的。 另一方面,我在所有三个平台上同时提供

XDG_RUNTIME_DIR
%TEMP%
)和fontDir
dataDir
)。在MACOS和Linux上,这些目录返回相同的路径 - 这是一个明确的设计决定,考虑用户如何编写代码,如果这些目录中的一个不可用:用户要么忘记处理它,要么只是后备到其他目录。有了选择的设计,这只是开箱即用的,而无需考虑它。
用户遇到他们之前的问题。
这就是为什么tho anderser Cache,config等。目录路径

返回

%APPDATA%dataLocalDir

,但是

application特定的缓存和config Directory路径

返回
%LOCALAPPDATA%
%LOCALAPPDATA%
注意子目录!这是为了确保应用程序的缓存,配置和数据目录的清洁分离,而不管用户可能拥有哪些怪异的Windows设置。

Split用例转为单独的模块。

我的库中有三个不同的模块,具有明确定义的,分开的用例:

BASEDIRS

,它查询用户不可识别的标准目录(缓存,配置,数据,可执行文件,运行时目录)的路径,并强烈建议使用

ProjectDirs
而改用。
projectdirs
,它计算您自己的应用程序或项目的高速缓存,配置或数据目录的位置,这些位置是从标准目录派生的。

userdirs

,它查询面向用户的标准目录(音频,文档,下载等)的路径。 %APPDATA%

%LOCALAPPDATA%\Company\Application\cache
具有相当无趣的构造函数(
%APPDATA%\Company\Application\config),BaseDirs
提供此工厂方法:
UserDirs

这种方法可确保用户最终以其应用程序的缓存,配置等符合标准的路径,目录 - 无需了解每个单独平台的所有复杂性。

一个建议:我将保留一个名为“基于XDG的库”的库,专注于Linux,并发布具有更通用名称的库,例如涉及Linux,Windows等的“标准目录库”,以避免混淆。

保留,在Windows上有一个自Windows Vista以来指定的保存游戏文件夹。 它称为“%userProfile%\保存游戏”。 FOLDERID_SAVEDGAMES Https://learn.microsoft.com/en-us/windows/win32/shell/nown/knownfolderid?redretectedfrom = msdn#constants

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.