在循环语句中向文本文件添加新行
Add new line to a text file in loop statement
我创建了一个从文本框中获取用户名的循环。我想将名称放入文本文件并每次添加一个新行。它不工作。它再次覆盖了以前的名称。我知道如何向文本文件添加新行,但在循环语句中它不起作用。
这是我的代码:
for (int i = 0; i < txt_user.length ; i++ )
{
File.WriteAllText(@"C:\mail\users.txt", txt_user[i].Text + Environment.NewLine);
}
这是在循环外编写新行的示例代码 - 它有效:
File.WriteAllText(@"C:\mail\users.txt", txt_user1.Text + Environment.NewLine + "abc");
你很接近:有 File.AppendAllText() or File.AppendText(). You could also collect all lines in memory first and use File.AppendAllLines()(如果你有足够的 RAM 来存储所有行)。
WriteAllText()
将写入新文件或覆盖现有文件。
这对于较小的文件来说效果很好,因为 OS 可能会应用一些缓存策略。但是,在循环中对非常大的文件执行此操作可能效率不高。那你应该看看FileStreams。
如果要添加到现有文件,请使用 File.AppendText。
如果实体太多,最好使用此代码
using (StreamWriter sw = File.CreateText(@"C:\mail\users.txt"))
{
for (int i = 0; i < txt_user.length ; i++ )
{
sw.WriteLine(txt_user[i].Text);
}
}
这将打开文件一次,并在枚举行时将行写入文本文件,然后关闭文件。它不会多次打开,也不会尝试在此过程中构建一个大字符串,这可能使其成为迄今为止给出的一堆答案中 I/O 和内存效率最高的。
File.WriteAllLines(@"C:\mail\users.txt",
Enumerable
.Range(0,txt_user.length)
.Select(i=>txt_user[i].Text));
我推荐使用 StringBuilder:
var builder = new StringBuilder();
for (int i = 0; i < txt_user.length ; i++ )
builder.AppendLine(txt_user[i].Text);
File.WriteAllText(@"C:\mail\users.txt", builder.ToString());
与其一直打开和关闭文件(因为这是 File.WriteAllText
在每次调用时所做的),不如使用字符串生成器准备文本并将其立即写入文件。由于文本来自文本框,因此我假设生成的字符串无论如何都不会很长。
var sb = new Stringbuilder();
for (int i = 0; i < txt_user.length; i++)
{
sb.AppendLine(txt_user[i].Text);
}
File.WriteAllText(@"C:\mail\users.txt", sb.ToString());
我创建了一个从文本框中获取用户名的循环。我想将名称放入文本文件并每次添加一个新行。它不工作。它再次覆盖了以前的名称。我知道如何向文本文件添加新行,但在循环语句中它不起作用。 这是我的代码:
for (int i = 0; i < txt_user.length ; i++ )
{
File.WriteAllText(@"C:\mail\users.txt", txt_user[i].Text + Environment.NewLine);
}
这是在循环外编写新行的示例代码 - 它有效:
File.WriteAllText(@"C:\mail\users.txt", txt_user1.Text + Environment.NewLine + "abc");
你很接近:有 File.AppendAllText() or File.AppendText(). You could also collect all lines in memory first and use File.AppendAllLines()(如果你有足够的 RAM 来存储所有行)。
WriteAllText()
将写入新文件或覆盖现有文件。
这对于较小的文件来说效果很好,因为 OS 可能会应用一些缓存策略。但是,在循环中对非常大的文件执行此操作可能效率不高。那你应该看看FileStreams。
如果要添加到现有文件,请使用 File.AppendText。
如果实体太多,最好使用此代码
using (StreamWriter sw = File.CreateText(@"C:\mail\users.txt"))
{
for (int i = 0; i < txt_user.length ; i++ )
{
sw.WriteLine(txt_user[i].Text);
}
}
这将打开文件一次,并在枚举行时将行写入文本文件,然后关闭文件。它不会多次打开,也不会尝试在此过程中构建一个大字符串,这可能使其成为迄今为止给出的一堆答案中 I/O 和内存效率最高的。
File.WriteAllLines(@"C:\mail\users.txt",
Enumerable
.Range(0,txt_user.length)
.Select(i=>txt_user[i].Text));
我推荐使用 StringBuilder:
var builder = new StringBuilder();
for (int i = 0; i < txt_user.length ; i++ )
builder.AppendLine(txt_user[i].Text);
File.WriteAllText(@"C:\mail\users.txt", builder.ToString());
与其一直打开和关闭文件(因为这是 File.WriteAllText
在每次调用时所做的),不如使用字符串生成器准备文本并将其立即写入文件。由于文本来自文本框,因此我假设生成的字符串无论如何都不会很长。
var sb = new Stringbuilder();
for (int i = 0; i < txt_user.length; i++)
{
sb.AppendLine(txt_user[i].Text);
}
File.WriteAllText(@"C:\mail\users.txt", sb.ToString());