C# 是否有一个变量不';是否在每次启动应用程序时重置?

C# 是否有一个变量不';是否在每次启动应用程序时重置?,c#,forms,variables,C#,Forms,Variables,让我解释一下: 假设我有一个Boolean变量,在编写程序代码时,我将其设置为False。 现在,每次我构建/运行应用程序时,这个布尔变量都会设置为False 我希望在用户输入一个特定字符串的情况下,Boolean将更改为True,然后每次我重新运行应用程序时,它将保持True,换句话说,变量现在将重置为True,您可以保存布尔值 以下是您的操作方法: 使用系统; 使用System.IO; 使用System.Runtime.Serialization.Formatters.Binary; 使用U

让我解释一下:

假设我有一个
Boolean
变量,在编写程序代码时,我将其设置为
False
。 现在,每次我构建/运行应用程序时,这个
布尔
变量都会设置为
False


我希望在用户输入一个特定字符串的情况下,
Boolean
将更改为
True
,然后每次我重新运行应用程序时,它将保持
True
,换句话说,变量现在将重置为
True
,您可以保存布尔值

以下是您的操作方法:

使用系统;
使用System.IO;
使用System.Runtime.Serialization.Formatters.Binary;
使用UnityEngine;
公共类存储系统
{
//=======保存=====
//“路径”应填写保存目录的完整路径,包括文件名和文件扩展名。
公共静态无效保存(布尔布尔值,字符串路径)
{
BinaryFormatter formatter=新的BinaryFormatter();
FileStream stream=新FileStream(路径,FileMode.Create);
序列化(流,布尔);
Log($“Bool保存在{path}”);
stream.Close();
}
//=======装载=====
//“路径”应填写保存目录的完整路径,包括文件名和文件扩展名。
公共静态bool加载选项(字符串路径)
{
如果(!File.Exists(path))
{
Console.WriteLine($”选项文件未在{path}中找到”);//对于调试,是可移动的
返回false;
}
BinaryFormatter formatter=新的BinaryFormatter();
FileStream stream=新FileStream(路径,FileMode.Open);
bool stuff=格式化程序。反序列化(流)为bool;
Log($“Bool在{path}加载”);
stream.Close();
归还物品;
}
}
只需确保在启动时加载即可。 此保存方法也适用于任何其他对象,例如ints和您自己的类(前提是它顶部有“[System.Serializable]”,并且您可以修改它保存/加载的数据类型。)

[编辑]
这是许多保存算法之一。这是一种保存到二进制文件的方法。如果您想保存到文本文件,其他答案可能会有所帮助。请记住,二进制文件比文本/xml文件更难篡改,因此建议使用此方法保存内容。

这可能是文件、数据库或注册表项。是否要永久保存数据?这可能是第一步如果你想加密持久化的数据,它仍然很容易被破坏。我猜你是想实施一个串行密钥/拷贝保护方案?基本上,如果像微软或Adobe这样的公司不能防止他们的产品被盗版,我认为你不需要在这方面投入太多的精力。听起来像是一份工作,有没有办法保存,让外部用户无法阅读?我不想给用户读/写/更改文件内容的能力,而从技术上讲,布尔值是不存在的。但是,如果你想让它变得很难做到,这就是方法。保存到文本文件通常不好,因为用户可以使用记事本轻松地修改某些值。如果保存到二进制文件,则不会出现这种情况。我尝试使用与您使用的类似的
BinaryWriter
,但在创建文件后,我打开的是记事本,不幸的是,我可以用纯文本读取。如你所知,我希望它不容易阅读。这是我使用过的代码:
using(BinaryWriter=newbinarywriter(File.Open(“Binary.bin”,FileMode.Create)){writer.Write(“string text\n”);}
@Twins96:您可以在运行应用程序之前轻松创建文件副本,然后替换它。或者干脆删除它。或者在虚拟机中运行所有内容,并在每次运行后恢复到快照。在本地存储值的方案中,无法防止用户破解该方案。你可以通过每次使用身份验证服务器来提高成功率,但1)如果你的客户需要互联网让应用程序工作,他们可能会生气,2)一个坚定的黑客无论如何都会破解可执行文件。我使用的是二进制格式化程序,而不是二进制编写器