How to get the application specific data folder (ProgramData)?

半世苍凉 提交于 2019-12-01 15:21:48

问题


I need to read and write files that contain application specific data, shared between all the users.

I tried to use Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), but it returns only C:\ProgramData.

My question is :

Does it exist a system like Path.GetDirectoryName(Application.UserAppDataPath), which will give me the exact folder to write, according to my application name and version?

Or is ProgramData not the right place to do that.

Thanks.


回答1:


Does it exist a system like Path.GetDirectoryName(Application.UserAppDataPath), which will give me the exact folder to write, according to my application name and version?

No it doesn't exist, at least when running on Windows 7 (don't know about Windows 8/ WinRT/ Windows Store apps). Feasible solution is just to concat Environment.GetFolderPath(...) output with a custom path for your application. Typically, to reduce chances of clashing, that could be something like YourOrganization\YourApplication, or YourFullName\YourApplication, possibly also appending version.

Or is ProgramData not the right place to do that.

That is the right place to store application-wide information on disk. Information related to your application and different for each Windows user logging on the machine should go instead in <User folder>\AppData\Roaming\..., or <User folder>\AppData\Local\....

Beware: as somebody already mentioned in comments, normally one needs administrator rights in order to work inside C:\ProgramData..., hence you would need to prepare a setup project that, during install phase, would create the folder inside ProgramData and give the right permissions.




回答2:


I think CommonApplicationData is exactly what you're looking for, as it's the global folder for all applications which are not bound to a user.

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);
}

There's also SpecialFolder.LocalApplicationData for user-bound data.



来源:https://stackoverflow.com/questions/27918865/how-to-get-the-application-specific-data-folder-programdata

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!