问题
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