C#将“X”次保存到一个.txt文件中,而不覆盖最后一个字符串

时间:2010-12-06 16:32:30

标签: c# text time save

好吧,现在我遇到了一个新问题。 我在C#中编写代码

每次我将字符串输入文本框并单击“保存”按钮时,我想从textBoxName保存到group.txt文件中。它应该按此顺序保存(如果它可以像A-Z一样排序那么好):

1. Petar Milutinovic
2. Ljiljana Milutinovic
3. Stefan Milutinovic
4. ... etc

我无法让它工作,我尝试使用我的第一个问题中的tehniques,但还没有解决方案:(

我猜这很容易,但我仍然是一个初学者,我需要这个......#/ p>

3 个答案:

答案 0 :(得分:1)

尝试从自上而下的方法解决这个问题。写出应该发生的事情,因为你的问题并不明显。

示例:

  1. 用户在(单行?)文本框中输入值
  2. 用户点击保存
  3. 在文件末尾附加一个新行,其中包含步骤1中文本框的内容
  4. 注意:每行都以行号为前缀,格式为“X. Sample”,其中X是行号,Sample是文本框中的文本。

    上述准确吗?

    (如果您只想在文本文件中添加一行,请参阅 http://msdn.microsoft.com/en-us/library/ms143356.aspx - File.AppendAllText(filename, myTextBox.Text + Environment.NewLine);可能是你想要的)

答案 1 :(得分:1)

这是一个简单的小例程,可用于读取,排序和编写文件。有很多方法可以做到,我的可能甚至不是最好的。即使是现在,我正在考虑“我本可以使用FileStream编写并完成迭代计算然后”,但它们是微优化,如果你有以后可以做到的多兆字节文件的性能问题。

    public static void AddUserToGroup(string userName)
    {
        // Read the users from the file
        List<string> users = File.ReadAllLines("group.txt").ToList();
        // Strip out the index number
        users = users.Select(u => u.Substring(u.IndexOf(". ") + 2)).ToList();
        users.Add(userName); // Add the new user
        users.Sort((x,y) => x.CompareTo(y)); // Sort
        // Reallocate the number
        for (int i = 0; i < users.Count; i++)
        {
            users[i] = (i + 1).ToString() + ". " + users[i];
        }
        // Write to the file again
        File.WriteAllLines("group.txt", users);
    }

答案 2 :(得分:0)

如果您需要在每次添加新行时对文件进行排序,您必须将文件加载到列表中,添加行,并对其进行排序,或使用某种搜索(我是推荐二进制搜索)以确定新行所属的位置并相应地插入。然而,第二种方法没有很多优点,因为你基本上必须重写整个文件才能插入一行 - 它只能节省你在最佳情况下的时间,这种情况发生在要插入的行落在文件的结尾。此外,第二种方法在处理器上稍微轻一些,因为您没有尝试对每一行进行排序 - 但对于小文件,差异将是不明显的。