Как добавить текст в несколько файлов - PullRequest
3 голосов
/ 08 октября 2009

Я не программист, но я исследователь, и мне нужно изменить некоторые файлы. У меня есть несколько текстовых файлов с расширением * .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 ]

7 голосов
/ 08 октября 2009

Будете ли вы удовлетворены этим oneliner, который вы можете поместить в любой пакетный файл DOS (.bat):

FOR %%I IN (c:\abc\*.mol) DO ECHO M  END>>%%I
3 голосов
/ 08 октября 2009
foreach (string fileName in Directory.GetFiles("directory", "*.mol"))
{
    File.AppendAllText(fileName, Environment.NewLine + "M  END");
}
1 голос
/ 08 октября 2009

Вам нужно перебирать файлы в каталоге. 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);
            }
        }
    }
}
1 голос
/ 08 октября 2009

Вам нужно будет перебрать все файлы, соответствующие этому шаблону, и записать их по отдельности. Используемый вами конструктор StreamWriter поддерживает запись только в отдельный файл ( source ).

Вы можете получить список файлов, используя:

 string[] filePaths = Directory.GetFiles("c:\\abc\\", "*.mol");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...