using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.IO;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
public static string dir;
public static Regex search;
public static Regex replace;
static void Main(string[] args)
{
dir = System.Configuration.ConfigurationManager.AppSettings.Get("dir"); // Verzeichnis aus Config lesen
DirectoryInfo di = new DirectoryInfo(dir); // verzeichnis prüfen
string logfilepath = di.FullName + "\\replacelog"; // Pfad zu Logfile
StreamWriter logfile = File.CreateText(logfilepath); // Logfile erstellen
string pattern1 = "Team=\"([^\n]*)\"(.*)Description=\"\""; // Regex Suche
search = new Regex(pattern1,RegexOptions.Singleline); // Regex
ListFiles files = new ListFiles(); // Alle .txt-Dateien im Ordner auswählen
List<string> filearray = files.GetFileList(dir, false); // Pfade der txt-Dateien in ein Array speichern
foreach (string f in filearray) // für jede Textdatei
{
StreamReader myFile = new StreamReader(f); // Datei bearbeiten
string content = myFile.ReadToEnd(); // Datei lesen
myFile.Close(); // lesen beenden
string replace = search.Replace(content,"Team=\"$1\"$2Description=\"$1\""); // Ersetzen
if (replace != content) // wenn etwas ersetzt wurde, also der ersetzte text nicht mit dem Original gleich ist
{
StreamWriter myWriter = new StreamWriter(f, false); // Datei mit ersetztem Inhalt schreiben
myWriter.Write(replace); // Inhalt schreiben
Console.WriteLine(f.ToString()); // Auf der Konsole den Pfad ausgeben
logfile.WriteLine(f.ToString()); // In die Logdatei den Pfad schreiben
myWriter.Close(); // schreiben beenden
}
}
logfile.Close(); // logfile schließen
Console.WriteLine("Ende. Enter drücken zum schließen."); // Konsolenausgabe - ende
Console.ReadLine(); // Konsole anhalten, um Ergebnis anschauen zu können
}
}
public class ListFiles // Hilfsklasse, siehe http://dotnet-snippets.de/dns/alle-dateien-eines-ordners-auflisten---c-version---SID627.aspx
{
/// <summary>
/// Creates a list which contains all filenames in a specific folder
/// </summary>
/// <param name="Root">Folder which contains files to be listed</param>
/// <param name="SubFolders">True for scanning subfolders</param>
/// <returns></returns>
public List<string> GetFileList(string Root, bool SubFolders)
{
List<string> FileArray = new List<string>();
try
{
string[] Files = System.IO.Directory.GetFiles(Root,"*.txt");
string[] Folders = System.IO.Directory.GetDirectories(Root);
for (int i = 0; i < Files.Length; i++)
{
FileArray.Add(Files[i].ToString());
}
if (SubFolders == true)
{
for (int i = 0; i < Folders.Length; i++)
{
FileArray.AddRange(GetFileList(Folders[i], SubFolders));
}
}
}
catch (Exception Ex)
{
throw (Ex);
}
return FileArray;
}
}
}