我有一个为大学写的Winform程序,所以他们可以运行测试文件。 该程序针对.NET 4.5,并在Windows 7上开发和运行。
为了方便技术人员运行文件,我添加了保存测试文件路径的功能。文件路径存储在变量" RunNames"下的设置文件(ProgSettings.settings)中。
当按下保存按钮时,我运行验证以确保路径末尾的测试文件存在并且在将其添加到RunNames列表之前有效:
/*
*Function: SaveButton_Click(sender, e)
*Notes: responds to the button click "Save"
* tries to save file (if valid) to settings
*/
private void SaveButton_Click(object sender, EventArgs e)
{
if (ValidateFile(TrackFileName.Text))
{
string displayName = updateLinkNames(TrackFileName.Text).ToUpper();
if (!ListOfTracks.Items.Contains(displayName))
{
ListOfTracks.Items.Add(displayName);
runNames.Add(TrackFileName.Text);
}
updateSettings();
}
}
/*
*Function: ValidateFile(fileName)
*Notes: called from save button click
* checks validity of the file path
*/
private bool ValidateFile(string fileName)
{
fileName = fileName.ToUpper();
FileToRun.FileName = fileName;
validFile = System.IO.File.Exists(fileName);
if(fileName != null && fileName != "" && fileName.EndsWith(".TXT") && validFile)
{
return true;
}
else
{
return false;
}
}
/*
*Function: updateSettings()
*Notes: updates the settings with the valid path
*/
private void updateSettings()
{
string value = String.Join(",", runNames.Select(i => i.ToString()).ToArray());
ProgSettings.Default.RunNames = value;
ProgSettings.Default.Save();
}
(对于那些不熟悉.settings他们存储C#上可用的基本类型的人来说,有一些方法可以包含数组,但最简单的解决方案是将数组的不同部分连接到带有分隔符的字符串中 - 我的情况",")。
然后当我再次加载程序时,我使用下面的getSavedFiles()函数填充一个复选框列表。
private List<string> getSavedFiles()
{
string localRunNames = ProgSettings.Default.RunNames.ToUpper();
string[] arr = localRunNames.Split(',').Select(s => Convert.ToString(s)).ToArray();
return arr.Cast<String>().ToList();
}
这些设置在我的工作计算机和我测试的个人笔记本电脑上都能正常工作。但是,现在该程序正在大学使用,他们说在下次运行程序关闭计算机后,所有保存的文件路径都消失了。
这是由于大学经理如何在计算机上使用帐户?或者还有其他原因吗?
对于.settings文件不起作用的情况,是否存在另一种替代方法来存储设置信息? (我能想到的唯一其他解决方案是让程序编写一个config.txt文件,我宁愿不做包装,应用程序在某个地方使用,但它没有写入权限)
以下是有关保存应用程序设置的最佳做法的问题的链接: