'SpecialFolder.LocalApplicationData'和'SpecialFolder.ApplicationData'有什么区别?

59
在我的系统中,%AppData%指向 C:\Users\<USER>\AppData\Roaming,而这是ApplicationData的别名。
但是也有C:\Users\<USER>\AppData\Local 还有更加混乱的D:\Users\<USER>\AppData\LocalLow
string local = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string roaming = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

我的问题是,我的应用程序应该将其数据保存在这些位置中的哪一个?

是否有关于使用哪个位置的指南?如果我选择了错误的位置,是否会让自己暴露于问题之中?


Roaming文件夹最常用于存储数据。我不知道实际的区别。 - Rick Kuipers
3个回答

71

Roaming文件夹在启用漫游配置文件时(在域环境中)在计算机之间进行复制。将其用于您想要在计算机之间共享的应用程序数据。但是不要在其中存储大型文件--IT部门不喜欢这样做,而且它会增加用户登录和注销所需的时间,因为文件在计算机之间复制。

Local文件夹不在计算机之间进行复制。将其用于特定于计算机的应用程序数据。

LocalLow文件夹用于低权限任务(如Internet Explorer)。您不需要担心它。

对于用户专门保存的文件,应默认将其放在Documents文件夹中。


1
对于使用 Microsoft 帐户登录到机器上的 Windows 8 用户,您对这些文件夹的使用有何想法?Windows 8 应用程序是否只是一个完全不同的实体,具有自己的 API 等,并且使用的文件夹不同/由 API 中介?使用 MS 帐户登录的 Windows 8 用户是否为“漫游用户”? - Bill
如果计算机根本不在域中,漫游文件夹是否也能正常工作? - ndreisg

12
根据MSDN的说法,区别在于LocalApplicationData保留在本地计算机上不会漫游...例如,如果用户从不同的计算机登入域,则会同步ApplicationData... LocalLow是指特定情况,如运行在IE“受保护模式”下的BHO...
对于标准应用程序,请始终使用ApplicationData。对于不需要漫游的内容,请使用 LocalApplicationData

7

来自MSDN - Environment.SpecialFolder枚举

ApplicationData - 该目录用作当前漫游用户的应用程序特定数据的公共存储库。漫游用户在网络上的多台计算机上工作。漫游用户的配置文件保存在网络上的服务器上,并在用户登录时加载到系统中。

LocalApplicationData - 该目录用作当前非漫游用户使用的应用程序特定数据的公共存储库。

简而言之,对于漫游配置文件,请使用ApplicationData,对于非漫游配置文件,请使用LocalApplicationData


通过官方文档的引用进行了很好的总结。对读者应该非常有帮助。 - nam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接