$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%
我已经在jvm
和rust的库中实现了此类功能。这是我学到的:
with应用程序名称,因为您的用户无法或不会。
提供计算full
路径(包括应用程序名称!)的API到配置,缓存等目录。不执行此操作将导致代码在3个主要平台中至少有2个是错误的,因为公约差异很大。 Consiss Ins CompanyMegacorp
(Web地址Megacorp.co.uk)名为
$XDG_*_HOME
(较低,没有空格),在窗口上应该是$XDG_*_DIRS
(请注意two
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
,它计算您自己的应用程序或项目的高速缓存,配置或数据目录的位置,这些位置是从标准目录派生的。
,它查询面向用户的标准目录(音频,文档,下载等)的路径。
而%APPDATA%
和
%LOCALAPPDATA%\Company\Application\cache
具有相当无趣的构造函数(
%APPDATA%\Company\Application\config
),BaseDirs
提供此工厂方法:
UserDirs
这种方法可确保用户最终以其应用程序的缓存,配置等符合标准的路径,目录 - 无需了解每个单独平台的所有复杂性。
保留,在Windows上有一个自Windows Vista以来指定的保存游戏文件夹。 它称为“%userProfile%\保存游戏”。 FOLDERID_SAVEDGAMES Https://learn.microsoft.com/en-us/windows/win32/shell/nown/knownfolderid?redretectedfrom = msdn#constants