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

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

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

我的问题是:

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

或者ProgramData不是正确的地方。

谢谢。

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

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

或者ProgramData不是正确的地方。

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

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

我认为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。