编写保存文件时,在放置数据之前清空空格,我认为它们会干扰数据

时间:2017-08-31 01:47:25

标签: c#

很抱歉再次打扰你们,你之前的反馈非常有用。我之前在你的帮助下创建了一个保存系统,它在一个.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);
        }
    }

非常感谢您提前应对我的经验/无知!

1 个答案:

答案 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.
    }
}