很抱歉再次打扰你们,你之前的反馈非常有用。我之前在你的帮助下创建了一个保存系统,它在一个.txt文件中写了一个名为Money的int,我正在尝试让它加载你的钱,这样你就可以在你离开的地方重新开始了。当写入保存文件时,它似乎根据金额在金额之前写入空行。例如,如果您保存时的金额为8,那么在8之前将有7个空格,但如果它是4则会有3个。我不确定它是否相关,但是当您按下时加载,无论你目前有多少钱,你的钱都会变为0。我也试过在.txt文件中手动删除空格,所以第一行是8,之前没有任何空格,但是也没有。我目前的保存代码是:
private void SaveBtn_Click(object sender, EventArgs e)
{
String filename = NameBox.Text;
if (filename == "")
{
filename = "New Save";
}
filename += ".txt";
String[] Money = new String[MainForm.Money];
Money[MainForm.Money - 1] = MainForm.Money.ToString();
System.IO.File.WriteAllLines(filename, Money);
Application.Exit();
}
我目前的加载代码是:
private void LoadBtn_Click_1(object sender, EventArgs e)
{
LoadMoney();
}
public void LoadMoney()
{
String money = System.IO.File.ReadLines(filename).ToString();
String line;
line = money.ToString();
if (int.TryParse(line, System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out MainForm.Money))
{
Money = int.Parse(line);
}
}
非常感谢您提前应对我的经验/无知!
答案 0 :(得分:2)
向文件写入大量行的问题来自于如何保存文件。这使得一个数组等于你有多少钱String[] Money = new String[MainForm.Money];
所以如果MainForm.Money等于10,那么你的数组有多大。接下来,System.IO.File.WriteAllLines()
写出数组的每一行,所以如果你的数组有9个空白值和1个实际数值,它会写出9个空行,然后写出1行,你想要的值。
要解决此问题,请将方法更改为此。
private void SaveBtn_Click(object sender, EventArgs e)
{
String filename = NameBox.Text;
if (filename == "")
{
filename = "New Save";
}
filename += ".txt";
System.IO.File.WriteAllText(filename, MainForm.Money.ToString());
Application.Exit();
}
这只会写出一行,它的值为MainForm.Money
。
我确定你现在加载是否有效,但是改变这样做肯定会有效。
public void LoadMoney()
{
String money = System.IO.File.ReadAllText(filename).Trim(); //trim removes all whitespace at the beginning and the end. May not be needed, but I personally do it just in case.
if (int.TryParse(line, out MainForm.Money))
{
//MainForm.Money will already be set to the correct value here. You probably only need to check if it doesnt parse, and then handle that case.
}
}