Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在循环语句中将新行添加到文本文件_C#_Loops_Text Files_Newline - Fatal编程技术网

C# 在循环语句中将新行添加到文本文件

C# 在循环语句中将新行添加到文本文件,c#,loops,text-files,newline,C#,Loops,Text Files,Newline,我创建了一个从文本框中获取用户名的循环。我想把名字放到一个文本文件中,每次都添加一行。它不起作用了。它再次覆盖了以前的名称。我知道如何在文本文件中添加新行,但在循环语句中它不起作用。 这是我的密码: for (int i = 0; i < txt_user.length ; i++ ) { File.WriteAllText(@"C:\mail\users.txt", txt_user[i].Text + Environment.NewLine); } 你很接近:有或者。您还可以

我创建了一个从文本框中获取用户名的循环。我想把名字放到一个文本文件中,每次都添加一行。它不起作用了。它再次覆盖了以前的名称。我知道如何在文本文件中添加新行,但在循环语句中它不起作用。 这是我的密码:

for (int i = 0; i < txt_user.length ; i++ )
{
    File.WriteAllText(@"C:\mail\users.txt", txt_user[i].Text + Environment.NewLine);
}
你很接近:有或者。您还可以先收集内存中的所有行并使用(如果您有足够的RAM来存储所有行)

WriteAllText()
将写入新文件或覆盖现有文件

这对于较小的文件来说已经足够好了,因为操作系统可能会应用一些缓存策略。但是,对于非常大的文件,在循环中这样做可能没有效率。那么你应该看看s。

你很接近了:有或。您还可以先收集内存中的所有行并使用(如果您有足够的RAM来存储所有行)

WriteAllText()
将写入新文件或覆盖现有文件


这对于较小的文件来说已经足够好了,因为操作系统可能会应用一些缓存策略。但是,对于非常大的文件,在循环中这样做可能没有效率。然后您应该看看s。

如果要添加到现有文件,请使用File.AppendText。

如果要添加到现有文件,请使用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);   
           }
        }   
使用(StreamWriter sw=File.CreateText(@“C:\mail\users.txt”))
{
对于(int i=0;i
如果实体太多,最好使用此代码

 using (StreamWriter sw = File.CreateText(@"C:\mail\users.txt")) 
        {
      for (int i = 0; i < txt_user.length ; i++ )
           {
            sw.WriteLine(txt_user[i].Text);   
           }
        }   
使用(StreamWriter sw=File.CreateText(@“C:\mail\users.txt”))
{
对于(int i=0;i
这将打开文件一次,并在文本文件枚举行时将行写入文本文件,然后关闭文件。它不进行多次打开,也不尝试在过程中构建一个大字符串,这可能使它成为迄今为止给出的一系列答案中I/O和内存效率最高的

File.WriteAllLines(@"C:\mail\users.txt",
  Enumerable
    .Range(0,txt_user.length)
    .Select(i=>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());
var builder=new StringBuilder();
对于(int i=0;i
我建议使用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());
var builder=new StringBuilder();
对于(int i=0;i
不要一直打开和关闭文件(因为这是
file.writealText
在每次调用时所做的),而是使用字符串生成器准备文本并立即将其写入文件。由于文本来自文本框,因此我假设生成的字符串不会很长

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());
var sb=new Stringbuilder();
对于(int i=0;i
不要一直打开和关闭文件(因为这是
file.writealText
在每次调用时所做的),而是使用字符串生成器准备文本并立即将其写入文件。由于文本来自文本框,因此我假设生成的字符串不会很长

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());
var sb=new Stringbuilder();
对于(int i=0;i
Well
File.WriteAllText
覆盖内容。您要打开文件并向其写入行。我建议您查看
StreamWriter
。还要注意你现在的方式(假设它能工作),打开文件,写一行,关闭文件,重复,重复,重复。那太糟糕了。你想打开它,写下你所有的东西,然后关闭它。效率更高。包含所有您需要的信息,请改用
AppendAllText
方法。出于我提到的原因,我建议不要使用@Jens解决方案。没有理由反复打开和关闭文件。这比一次做效率要低得多。@Jens同意,但直到现在你才提到
StringBuilder
。你刚才告诉他使用另一种方法。嗯
File.writealText
覆盖内容。您要打开文件并向其写入行。我建议您查看
StreamWriter
。还要注意你现在的方式(假设它能工作),打开文件,写一行,关闭文件,重复,重复,重复。那太糟糕了。你想打开它,写下你所有的东西,然后关闭它。效率更高。包含所有您需要的信息,请改用
AppendAllText
方法。出于我提到的原因,我建议不要使用@Jens解决方案。没有理由反复打开和关闭文件。这比一次做效率要低得多。@Jens同意,但直到现在你才提到
StringBuilder
。你刚刚告诉他使用另一种方法。考虑到我们不知道他的循环是否有2个条目或20亿条,我认为这是一个糟糕的建议。他应该归档。在循环外打开,写入内容,然后在循环外关闭流。这个答案可能会打开/关闭文件数十亿次,因为我们不知道循环执行多少次。@ ToMasWale-没有一个和我给出的答案一样有效,而且我几乎不认为我的答案很难实现。为什么它会以错误的方式出现