我不是程序员,但我是研究员,我需要修改一些文件。 我有许多* .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 :(得分: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);
}
}
}
}