如何获取应用程序特定的数据文件夹(ProgramData)?

时间:2015-01-13 09:33:31

标签: c# winforms appdata programdata

我需要读取和写入包含所有用户共享的特定于应用程序的数据的文件。

我尝试使用Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),但只返回 C:\ ProgramData

我的问题是:

是否存在类似Path.GetDirectoryName(Application.UserAppDataPath)的系统,它会根据我的应用程序名称和版本为我提供准确的文件夹?

ProgramData 不适合这样做。

感谢。

2 个答案:

答案 0 :(得分:4)

  

是否存在类似Path.GetDirectoryName(Application.UserAppDataPath)的系统,它会根据我的应用程序名称和版本为我提供要写的确切文件夹?

不存在,至少在Windows 7上运行时(不了解Windows 8 / WinRT / Windows应用商店应用)。可行的解决方案是将Environment.GetFolderPath(...)输出与您的应用程序的自定义路径连接起来。通常,为了减少冲突的可能性,可能会像YourOrganization\YourApplicationYourFullName\YourApplication,也可能是附加版本。

  

或者ProgramData不适合这样做。

这是在磁盘上存储应用程序范围信息的正确位置。与您的应用程序相关的信息以及登录计算机的每个Windows用户的信息应该改为<User folder>\AppData\Roaming\...<User folder>\AppData\Local\...

小心:正如有人在评论中提到的那样,通常需要管理员权限才能在 C:\ ProgramData ... 中工作,因此您需要准备一个安装项目,在安装阶段,将在 ProgramData 中创建文件夹并提供正确的权限。

答案 1 :(得分:3)

我认为CommonApplicationData正是您要寻找的,因为它是所有未绑定到用户的应用程序的全局文件夹。

var commonpath = GetFolderPath(SpecialFolder.CommonApplicationData);
var path = Path.Combine(commonpath, "YourAppName\\YourApp.exe");
try { 
    Process.Start(path);
    // or put data there or whatever
} 
catch (Exception ex)
{
    MessageBox.Show(path);
}

还有用于用户绑定数据的SpecialFolder.LocalApplicationData。