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

Posted

技术标签:

【中文标题】C# 将“X”次保存到一个 .txt 文件中而不覆盖最后一个字符串【英文标题】:C# Saving "X" times into one .txt file without overwriting last string 【发布时间】:2010-12-06 16:32:29 【问题描述】:

好吧,现在我有一个新问题。 我用 C# 编写代码

每次我在文本框中输入字符串并单击保存按钮时,我都想从 textBoxName 保存到 group.txt 文件中。它应该按这个顺序保存(如果可以像 A-Z 那样对它进行排序,那就太好了):

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

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

我猜这很容易,但我仍然是初学者,我非常需要这个......

【问题讨论】:

不,不是。我正在为我妈妈做一些管理应用程序:) 并且通过这个,我试图学习新的东西 【参考方案1】:

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

例子:

    用户在(单行?)文本框中输入值 用户点击保存 在文件末尾追加一个新行,其中包含步骤 1 中文本框的内容

注意:每行都以行号为前缀,格式为“X. Sample”,其中 X 是行号,Sample 是文本框中的文本。

以上准确吗?

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

【讨论】:

是的,我想说的...用户点击,然后在文件中追加新行。每次用户单击保存时,都会在 .txt 文件中添加新行 您可以尝试 File.AppendAllText 方法,如链接和我的回答中的示例所示。【参考方案2】:

这是一个简单的小程序,您可以使用它来读取、排序和写入文件。有很多方法可以做到这一点,我的可能甚至不是最好的。即使现在我在想“我本可以使用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);
    

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于C# 将“X”次保存到一个 .txt 文件中而不覆盖最后一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

时间循环 - 将矢量数据存储在文件中而不覆盖

将数据存储在列表中而不丢失它们(C#)

如何将多个 python 文件组织到一个模块中而不像一个包一样?

C# 将多个文本框保存到一个 .txt 文件中

将 .so 合并到另一个 .so 中而不依赖?

如何将值添加到数组中而不将其在for循环外重置为0