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 文件中而不覆盖最后一个字符串的主要内容,如果未能解决你的问题,请参考以下文章