有可能为C#Windows应用程序提供某种内部存储吗?
我已经创建了一个小应用程序,通过点击按钮生成一个随机数,目前我正在将该数字保存在一个.txt文件中有可能为C#Windows应用程序提供某种内部存储吗?,c#,windows-applications,C#,Windows Applications,我已经创建了一个小应用程序,通过点击按钮生成一个随机数,目前我正在将该数字保存在一个.txt文件中 private void button1_Click(object sender, EventArgs e) { Random rnd = new Random(); int random = rnd.Next(1, 10000); // saving to a file is not an option! //File.AppendAllText(@"C
private void button1_Click(object sender, EventArgs e)
{
Random rnd = new Random();
int random = rnd.Next(1, 10000);
// saving to a file is not an option!
//File.AppendAllText(@"C:\Users\Public\no.txt", random + Environment.NewLine);
}
要解决的问题是,这个随机生成的数字必须是唯一的(范围从1到9999),因此每次生成该数字时,我都会检查该数字之前是否生成过。但要做到这一点,我必须保留每个生成的数字的记录,以便能够检查、比较,如果存在,则生成一个新的数字,直到所有数字都被使用
所以问题是:是否有可能在应用程序中保存一个记录,这样我就不必创建任何额外的文件
更新
关闭应用程序后,必须保存以前的号码才能创建唯一的新号码 没有用于.NET程序集的“内部存储”。保存文件有什么错
您还可以使用或数据库来保存数据。我认为简单的答案是调整函数在应用程序上下文中的工作方式 我将改变逻辑如下:
- 程序运行时,将列表保留在数组中
- 当需要添加新数字时,请调整数组大小,然后添加它
- 退出时,将数组内容保存到文件中(按照您选择的格式,我个人会使用逗号分隔)
- 启动时,加载文件并填充数组(如果用逗号或其他字符分隔,请将其读入字符串并使用split函数)
// should be in an accessible class scope - public or maybe even static
int[] myList = new list[0]; //start at 0 or empty
//function ressize Array by 1, accessible class scope - public or even static
static public int[] incrementIntArrayBy1(int[] oldArray){
int[] newArray = new int[oldArray.Length + 1];
Array.Copy(oldArray, newArray, oldArray.Length);
return newArray;
}
//function on button
private void button1_Click(object sender, EventArgs e){
mylist = incrementIntArrayBy1(myList);
myList[myList.length-1] = new Random().Next(1, 1000);
}
System.Configuration.Configuration=ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
randoms=string.IsNullOrEmpty(ConfigurationManager.AppSettings[“randoms”])?新建列表():ConfigurationManager.AppSettings[“randoms”]。拆分(',')。选择(int.Parse).ToList();
随机rnd=新随机();
int random=rnd.Next(11000);
如果(!randoms.Contains(random))
{
随机添加(随机);
config.AppSettings.Settings.Add(“randoms”,string.Join(“,”,randoms.Select(p=>p.ToString()).ToList());
config.Save(ConfigurationSaveMode.Minimal);
}
您可以定义应用程序中的密钥设置:
我不确定config.AppSettings.setting.Add的工作原理。我认为它通过连接增加了前一个的价值 我会生成稍微不同的随机数
这样就不必检查所有数字,以查看它们是否是以前生成的,这可能会在您到达最后几个数字时造成延迟。因此,您想删除File.AppendAllText?是的……这是临时解决方案!最好的情况是,应用程序本身以某种方式在内部保存了一个数组…不创建任何其他文件。您希望在下次运行应用程序时,此信息可用吗?另外,按钮可能被按下多少次?一个简单的解决方案是使用应用程序变量。Application[“Randoms”]保存列表的串联值,并在启动应用程序时通过拆分值再次读取。当应用程序关闭时,必须保存该数组,因此下次启动应用程序时,我必须拥有以前生成的数字。这是我认为最棘手的部分…(应用程序关闭)我无法创建任何其他文件,这不是一个选项。。。什么是ProgramData或AppData?它是永久性的吗?保存到注册表将是一个选项!ProgrammData/AppData只是用于存储设置的特殊文件夹。无法将数据保存到exe,您需要一些存储空间。我添加了一个指向regsitry教程的链接。是的,所以现在我在检查以前生成的数字时遇到了问题。我可以简单地为每个生成的数字保存一个新的注册表项,然后为新的数字简单地检查是否存在具有这样或那样值的项吗?我只需要简单地创建一个键,使用字符串连接和拆分方法来存储整数数组。不确定是否有更好的方法,我通常不使用注册表。你们都认为Aryan Firouzyan的答案如何?保存到文件不是我的选择。为什么不使用
List
而不是自己编写所有这些代码呢?考虑到它是一个简单的整数数组,似乎没有必要。lewis4u,你提到的问题“任何其他文件”-这将使用与您当前拥有的相同的“1”文件。您可以将它们放入HKEY_LOCAL_计算机或当前用户注册表项(如有人建议的,取决于您的需要)-如果您正在序列化生成的数字或将其保存为逗号分隔的列表,这将是微不足道的。我是否可以将新值保存到该项=”randoms“在应用程序启动后,当应用程序关闭时,最后保存的值应该在那里???我尝试了,当我关闭时,它正在工作,然后再次启动应用程序(可以从键中读取以前的值)。但我对config.AppSettings.Settings.Add的工作原理感到困惑。您可以通过应用程序逻辑来修复它。我会在一天结束前检查并发布结果!注册表项是否可以有一个值数组?我的意思是将key=>value
作为key=>[value,value2,value3]
是的,我放弃了。我正在注册表中保存数组