gpt4 book ai didi

c# - 在项目文件夹而不是 AppData 中存储应用程序设置

转载 作者:行者123 更新时间:2023-11-30 16:26:01 25 4
gpt4 key购买 nike

我的项目中有一个 Settings.cs 文件,我通过

从我的程序中访问其中的数据
Properties.Settings.Default.MyProperty

生成的设置文件存放在以下位置

C:\Users\Foo\AppData\Local\MyApp\MyApp.exe_Url_jknwq2raeohczydfp1loj02nf05zldfk\1.0.0.0\user.config

问题在于,这不仅是用户特定的,而且还会导致程序的每个签名(调试/发布等)都有许多 user.config 文件,这会迫使开发人员-用户填充整个设置每次他启动还没有特定 user.config 的程序“版本”时,都会再次出现。 (如果我不够清楚,我很乐意提供更多细节)

我希望我的应用程序为所有用户提供一个设置文件,而不管“版本”(调试/发布,或其他)。这样一来,开发用户将不得不设置一次,并且这些设置将在每次启动应用程序时生效,而无需为其他签名/用户重新输入。

最佳答案

您可以像所有高级程序一样在注册表中保存和读取设置,这就是如何做到这一点:

public object GetRegistryValue(string KeyName, object DefaultValue)
{
object res = null;
try
{
Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();
Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true);
if (k != null)
{
res = k.GetValue(KeyName, DefaultValue);
}
else
{
k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName");
}
if (k != null)
k.Close();
// ex As Exception
}
catch
{
//PromptMsg(ex)
}
return res;
}

public void SetRegistryValue(string KeyName, object _Value)
{
try
{
Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();

Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true);
if (k != null)
{
k.SetValue(KeyName, _Value);
}
else
{
k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName");
k.SetValue(KeyName, _Value);
}
if (k != null)
k.Close();
// ex As Exception
}
catch
{
//PromptMsg(ex)
}
}

另一个您可以选择创建一个可序列化类([Serializable()] attrib),其中包含您的所有设置作为属性,然后将其保存在您的应用程序中目录,带有 BinaryFormatter 类。

public void saveBinary(object c, string filepath)
{
try
{
using (System.IO.Stream sr = System.IO.File.Open(filepath, System.IO.FileMode.Create))
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(sr, c);
sr.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}

public object loadBinary(string path)
{
try
{
if (System.IO.File.Exists(path))
{
using (System.IO.Stream sr = System.IO.File.Open(path, System.IO.FileMode.Open))
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
object c = bf.Deserialize(sr);
sr.Close();
return c;
}
}
else
{
throw new Exception("File not found");
}
}
catch (Exception ex)
{
throw ex;
}
return null;
}

关于c# - 在项目文件夹而不是 AppData 中存储应用程序设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com