【问题标题】:add an empty line inside text file在文本文件中添加一个空行
【发布时间】:2014-11-27 15:43:37
【问题描述】:

让我举个例子说明我的文件的外观:

Hello
my
name
is

现在,例如,我想用 System.IO.File.ReadAllLines(); 遍历这个文件的不同行;然后用循环检查当前行中是否包含单词“my”(在这种情况下是第二行)。

下一步,我想在“my”之后添加一个新行,如下所示:

Hello
my

name
is

我现在用 2 种方法来解决这个问题。我希望 File.Append();将提供一种方法,我可以在 找到我要查找的字符串之后附加任何内容,但显然它只提供将字符串附加到文件末尾的方法。

我的第二种方法是使用 string[] test=System.IO.File.ReadAllLines(); 读取所有行 然后遍历所有行,检查每一行

for (int i = 0; i < (test.Length - 1); i++)
{
    if(test[i].Contains("my"))
    {
        test[i] = test[i] + Environment.NewLine;
    }
}

然后使用 System.IO.File.WriteAllLines(); 将所有这些写回文件中;

我在这里面临的问题是这个命令并没有真正在文件中添加一个真正的新行,因为我已经检查了 test.Length 之前和之后,结果两次我都得到了 4。

【问题讨论】:

  • 你正在写回结果?你能告诉我们更多代码吗?
  • 尝试使用 StringBuilder 代替:逐行读取(ReadAllLines() 的插入;您正在使用)并使用 Append() 或 AppendLine()。
  • 而不是Environment.NewLine 使用\r\n 在字符串后面添加
  • @VDesign 这会有什么不同?如果在 Windows(或更恰当地说,非 Unix 系统)中运行,Environment.NewLine 是文字字符串“\r\n”。见这里:msdn.microsoft.com/en-us/library/…

标签: c# .net string text


【解决方案1】:

另一种选择是将行添加到列表中,这将为您提供 Insert() 方法: *仅用于相对较小的文件。

类似:

        string path = @"c:\some\path\file.txt";
        List<String> lines = new List<string>(System.IO.File.ReadAllLines(path));
        for (int i = 0; i < lines.Count; i++)
        {
            if (lines[i].Contains("my"))
            {
                if (i < lines.Count -1)
                {
                    lines.Insert(i + 1, "");
                }
                else
                {
                    lines.Add("");
                }
            }
        }
        System.IO.File.WriteAllLines(path, lines.ToArray());

【讨论】:

  • 这是完美的答案。谢谢
【解决方案2】:

首先,我建议你使用StringBuilder。最好在添加许多字符串时使用它,因为字符串是不可变的,因此当您执行 += 或简单地为数组槽分配一个新字符串时,每个字符串都会重新创建。

此代码将执行您要查找的操作,并且会处理无新行边缘情况:

            var filePath = //your file path
            var test = File.ReadAllLines(filePath);
            var sb = new StringBuilder();
            for (int i = 0; i < (test.Length - 1); i++)
            {
                sb.Append(test[i]);
                sb.Append(Environment.NewLine);
                if (test[i].Contains("my"))
                {
                    // This adds that extra new line
                    sb.Append(Environment.NewLine);
                }
            }
            sb.Append(test[test.Length-1]);

            File.WriteAllText(filePath,  sb.ToString());

【讨论】:

    【解决方案3】:
    [TestMethod]
        public void InsertLines()
        {
            var test = File.ReadAllLines(@"c:\SUService.log");
            var list = new List<string>();
    
            for (int i = 0; i < (test.Length - 1); i++)
            {
                list.Add(test[i]);
                if (test[i].Contains("my"))
                {
                    list.Add(Environment.NewLine);
                }
            }
            File.WriteAllLines(@"c:\SUService.log", list);
        }
    

    【讨论】:

      【解决方案4】:

      不适用于上述问题:但一般来说,如果你想在一行之后添加一个新行,你只需要添加一个新行字符 -> 所以如果你想在一行之后添加一个空行 只需添加 2 个换行符

      File.WriteAllText(filePath,"\n\n");
      

      这里作者会跳转2次并在发送行中添加即将到来的内容

      【讨论】:

        猜你喜欢
        • 2012-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-07
        • 2021-07-05
        • 2021-01-31
        • 2022-11-30
        • 2011-02-03
        相关资源
        最近更新 更多