如何将文本附加到多个文件

时间:2009-10-08 14:15:46

标签: c# file-io

我不是程序员,但我是研究员,我需要修改一些文件。 我有许多* .mol扩展名的文本文件位于c:\ abc \目录中。我需要将包含以下文本“M END”的行附加到此列表中的每个文件。我尝试在C#中使用但没有任何结果:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamWriter sw = new StreamWriter("c:\\abc\\*.mol", true); 
            sw.WriteLine("M  END"); 
            sw.Close();   

        }
    }
}

请建议解决方案。

谢谢!

4 个答案:

答案 0 :(得分:7)

您是否对这个可以放入任何DOS批处理(.bat)文件的oneliner感到满意:

FOR %%I IN (c:\abc\*.mol) DO ECHO M  END>>%%I

答案 1 :(得分:3)

foreach (string fileName in Directory.GetFiles("directory", "*.mol"))
{
    File.AppendAllText(fileName, Environment.NewLine + "M  END");
}

答案 2 :(得分:1)

您需要遍历匹配该模式的所有文件并单独写入它们。您使用的StreamWriter构造函数仅支持写入单个文件(source)。

您可以使用以下方式获取文件列表:

 string[] filePaths = Directory.GetFiles("c:\\abc\\", "*.mol");

答案 3 :(得分:1)

您需要遍历目录中的文件。 DirectoryInfo / FileInfo可以很容易地执行此操作。此外,由于您想要追加到最后,您需要在最后签署签名之前寻找流。

这是一个仅适用于该位置的解决方案。如果需要,您需要添加递归支持以下降到子目录中。

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace appender
{
    class Program
    {
        static void AppendToFile(FileInfo fi)
        {
            if (!fi.Exists) { return; }

            using (Stream stm = fi.OpenWrite())
            {
                stm.Seek(0, SeekOrigin.End);

                using (StreamWriter output = new StreamWriter(stm))
                {
                    output.WriteLine("M  END");
                    output.Close();
                }
            }
        }

        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo("C:\\abc\\");
            FileInfo[] fiItems = di.GetFiles("*.mol");

            foreach (FileInfo fi in fiItems)
            {
                AppendToFile(fi);
            }
        }
    }
}