2009-10-08 2 views
3

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

     } 
    } 
} 

Пожалуйста, предложите решение.

Спасибо!

+0

Почему вы используете C# в первую очередь. У вас, похоже, есть какой-то опыт bash, почему бы не попробовать использовать PowerShell? –

ответ

1

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

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

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

Хорошо, если вы не запустили файл, который заблокирован или у вас нет прав доступа. то вся вещь не работает (что может быть хорошо в некоторых случаях) – Crash893

7

ли вы удовлетворены этим Oneliner, что вы можете поместить в любой партии DOS (BAT-файл):

FOR %%I IN (c:\abc\*.mol) DO ECHO M END>>%%I 
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); 
      } 
     } 
    } 
} 
+0

Поток не является хорошим выбором, когда File.AppendAllText достигнет того же результата в одной строке. – Polyfun

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

+1 для использования AppendAllText (мое решение использовало ReadAllText и WriteAllText, потому что я не знал об AppendAllText). Ницца! – Polyfun

Смежные вопросы