我有一个下载各种文件的Windows应用程序。我想缓存这些文件,但我不确定在哪里放置缓存。它应该存在于用户的主文件夹中,以便它们始终具有访问权限,但我认为Documents
等文件夹不合适。
相当于我在macOS和Linux上寻找的东西:
~/Library/Caches/MyApp
~/.cache/MyApp
应用程序缓存应该存储在Windows上的哪个位置?
请注意,与this question不同,我不是在询问临时文件。我的缓存应该跨会话重用。
请注意,我没有构建Windows应用商店应用。
答案 0 :(得分:1)
不需要漫游的每用户数据应存储在CSIDL_LOCAL_APPDATA
下。您可以通过调用SHGetFolderPath
(或.NET中的Environment.GetFolderPath
)来获取此路径。如果您需要在域环境中漫游数据,请使用CSIDL_APPDATA
,但对于大型文件来说这不是一个好主意......
答案 1 :(得分:0)
我的最终解决方案:
public static Path getCacheFolder(final String osName, final FileSystem fs) {
Objects.requireNotNull(osName, "osName is null");
Objects.requireNotNull(fs, "fs is null");
// macOS
if (osName.toLowerCase().contains("mac")) {
return fs.getPath(System.getProperty("user.home"), "Library", "Caches");
}
// Linux
if (osName.contains("nix") || osName.contains("nux") || osName.contains("aix")) {
return fs.getPath(System.getProperty("user.home"), ".cache");
}
// Windows
if (osName.contains("indows")) {
return fs.getPath(System.getenv("LOCALAPPDATA"), "Caches");
}
// A reasonable fallback
return fs.getPath(System.getProperty("user.home"), "caches");
}