Откройте файл и замените строки в C #

Я пытаюсь найти лучший способ открыть существующий файл и заменить все строки, которые соответствуют объявленной строке, с новой строкой, а затем закрыть.

Предложения?

Может быть сделано в одной строке:

File.WriteAllText("Path", Regex.Replace(File.ReadAllText("Path"), "[Pattern]", "Replacement")); 

Если вы читаете большие файлы , и строка для замены может не выглядеть разбитой по нескольким строкам, я бы предложил что-то вроде следующего …

 private static void ReplaceTextInFile(string originalFile, string outputFile, string searchTerm, string replaceTerm) { string tempLineValue; using (FileStream inputStream = File.OpenRead(originalFile) ) { using (StreamReader inputReader = new StreamReader(inputStream)) { using (StreamWriter outputWriter = File.AppendText(outputFile)) { while(null != (tempLineValue = inputReader.ReadLine())) { outputWriter.WriteLine(tempLineValue.Replace(searchTerm,replaceTerm)); } } } } } 

Затем вам нужно будет удалить исходный файл и переименовать новый в исходное имя, но это тривиально – как добавление некоторой базовой проверки ошибок в этот метод.

Конечно, если ваш текст замены может быть через две или более строк, вам нужно будет немного поработать, но я оставлю это вам, чтобы понять. 🙂

Небольшое улучшение предложенного ответа, которое не требует Regex и отвечает требованиям вопроса:

 File.WriteAllText("Path", File.ReadAllText("Path").Replace("SearchString", "Replacement")); 
 using System; using System.IO; using System.Text.RegularExpressions; public static void ReplaceInFile( string filePath, string searchText, string replaceText ) { var content = string.Empty; using (StreamReader reader = new StreamReader( filePath )) { content = reader.ReadToEnd(); reader.Close(); } content = Regex.Replace( content, searchText, replaceText ); using (StreamWriter writer = new StreamWriter( filePath )) { writer.Write( content ); writer.Close(); } } 
 public partial class ReadAndChange : System.Web.UI.Page { ArrayList FolderList = new ArrayList(); ArrayList FolderListSearch = new ArrayList(); ArrayList FileList = new ArrayList(); protected void Page_Load(object sender, EventArgs e) { AllFolderList("D:\\BinodBackup\\Nilesh\\14.5.2013\\Source"); foreach (string Path in FolderList) { AllFileList(Path); } foreach (string Path in FileList) { ReplaceFile(Path, Path.Replace("Source", "EditedCode")); } //string SourcePath = "D:\\BinodBackup\\Nilesh\\14.5.2013\\Onesource\\Onesource\\UserManagement\\UserControls\\AddUserDetails.ascx.cs"; //string ReplacePath = "D:\\AddUserDetails.ascx.cs"; //ReplaceFile(SourcePath, ReplacePath); } private static void ReplaceFile(string SourcePath, string ReplacePath) { int counter = 1; string line; // Read the file and display it line by line. System.IO.StreamReader file = new System.IO.StreamReader(SourcePath); while ((line = file.ReadLine()) != null) { if (!(line.Contains("//"))) { if (line.Contains(".LogException(")) { //Console.WriteLine(counter.ToString() + ": " + line); string[] arr = line.Split(','); string stringToReplace = arr[0].Replace("LogException", "Publish") + " , " + arr[2].Trim() + " , " + arr[3].Replace(");", "").Trim() + " , " + arr[1].Trim() + ");"; //File.WriteAllText(currentPath, Regex.Replace(File.ReadAllText(currentPath), line, line + " Added")); File.WriteAllText(ReplacePath, File.ReadAllText(ReplacePath).Replace(line, stringToReplace)); //ReplaceInFile(currentPath, line, stringToReplace); } } counter++; } file.Close(); } private void AllFileList(string FolderPath) { DirectoryInfo dir = new DirectoryInfo(FolderPath); DirectoryInfo[] subdir = dir.GetDirectories(); if (subdir.Length > 0) { foreach (DirectoryInfo dr in subdir) { FileInfo[] files1 = dr.GetFiles(); foreach (FileInfo file in files1) { if(file.Name.EndsWith(".cs")) CheckAndAdd((file.DirectoryName + "\\" + file.Name), FileList); } } } } private void AllFolderList(string FolderPath) { string CurFolderPatgh = FolderPath; Again: AddToArrayList(CurFolderPatgh); DirectoryInfo dir = new DirectoryInfo(CurFolderPatgh); DirectoryInfo[] subdir = dir.GetDirectories(); if (subdir.Length > 0) { foreach (DirectoryInfo dr in subdir) { AddToArrayList(((System.IO.FileSystemInfo)(dir)).FullName + "\\" + dr.Name); } } if (FolderListSearch.Count > 0) { foreach (string dr in FolderListSearch) { CurFolderPatgh = dr; FolderListSearch.Remove(dr); goto Again; } } } private void AddToArrayList(string FolderPath) { if (!(FolderList.Contains(FolderPath))) { CheckAndAdd(FolderPath, FolderList); CheckAndAdd(FolderPath, FolderListSearch); } } private void CheckAndAdd(string FolderPath,ArrayList ar) { if (!(ar.Contains(FolderPath))) { ar.Add(FolderPath); } } public static void ReplaceInFile( string filePath, string searchText, string replaceText) { var content = string.Empty; using (StreamReader reader = new StreamReader(filePath)) { content = reader.ReadToEnd(); reader.Close(); } content = content.Replace(searchText, replaceText); using (StreamWriter writer = new StreamWriter(filePath)) { writer.Write(content); writer.Close(); } } } - public partial class ReadAndChange : System.Web.UI.Page { ArrayList FolderList = new ArrayList(); ArrayList FolderListSearch = new ArrayList(); ArrayList FileList = new ArrayList(); protected void Page_Load(object sender, EventArgs e) { AllFolderList("D:\\BinodBackup\\Nilesh\\14.5.2013\\Source"); foreach (string Path in FolderList) { AllFileList(Path); } foreach (string Path in FileList) { ReplaceFile(Path, Path.Replace("Source", "EditedCode")); } //string SourcePath = "D:\\BinodBackup\\Nilesh\\14.5.2013\\Onesource\\Onesource\\UserManagement\\UserControls\\AddUserDetails.ascx.cs"; //string ReplacePath = "D:\\AddUserDetails.ascx.cs"; //ReplaceFile(SourcePath, ReplacePath); } private static void ReplaceFile(string SourcePath, string ReplacePath) { int counter = 1; string line; // Read the file and display it line by line. System.IO.StreamReader file = new System.IO.StreamReader(SourcePath); while ((line = file.ReadLine()) != null) { if (!(line.Contains("//"))) { if (line.Contains(".LogException(")) { //Console.WriteLine(counter.ToString() + ": " + line); string[] arr = line.Split(','); string stringToReplace = arr[0].Replace("LogException", "Publish") + " , " + arr[2].Trim() + " , " + arr[3].Replace(");", "").Trim() + " , " + arr[1].Trim() + ");"; //File.WriteAllText(currentPath, Regex.Replace(File.ReadAllText(currentPath), line, line + " Added")); File.WriteAllText(ReplacePath, File.ReadAllText(ReplacePath).Replace(line, stringToReplace)); //ReplaceInFile(currentPath, line, stringToReplace); } } counter++; } file.Close(); } private void AllFileList(string FolderPath) { DirectoryInfo dir = new DirectoryInfo(FolderPath); DirectoryInfo[] subdir = dir.GetDirectories(); if (subdir.Length > 0) { foreach (DirectoryInfo dr in subdir) { FileInfo[] files1 = dr.GetFiles(); foreach (FileInfo file in files1) { if(file.Name.EndsWith(".cs")) CheckAndAdd((file.DirectoryName + "\\" + file.Name), FileList); } } } } private void AllFolderList(string FolderPath) { string CurFolderPatgh = FolderPath; Again: AddToArrayList(CurFolderPatgh); DirectoryInfo dir = new DirectoryInfo(CurFolderPatgh); DirectoryInfo[] subdir = dir.GetDirectories(); if (subdir.Length > 0) { foreach (DirectoryInfo dr in subdir) { AddToArrayList(((System.IO.FileSystemInfo)(dir)).FullName + "\\" + dr.Name); } } if (FolderListSearch.Count > 0) { foreach (string dr in FolderListSearch) { CurFolderPatgh = dr; FolderListSearch.Remove(dr); goto Again; } } } private void AddToArrayList(string FolderPath) { if (!(FolderList.Contains(FolderPath))) { CheckAndAdd(FolderPath, FolderList); CheckAndAdd(FolderPath, FolderListSearch); } } private void CheckAndAdd(string FolderPath,ArrayList ar) { if (!(ar.Contains(FolderPath))) { ar.Add(FolderPath); } } public static void ReplaceInFile( string filePath, string searchText, string replaceText) { var content = string.Empty; using (StreamReader reader = new StreamReader(filePath)) { content = reader.ReadToEnd(); reader.Close(); } content = content.Replace(searchText, replaceText); using (StreamWriter writer = new StreamWriter(filePath)) { writer.Write(content); writer.Close(); } } } 
 using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; namespace DevExpressFileEditing { class Program { static List _files; private static Dictionary _replaceList; static void Main() { _files = new List(); _replaceList = new Dictionary(); Console.WriteLine("Dark directory searching"); SearchFilesInDirectories(new DirectoryInfo(@"C:\Sourcebank\Dark")); Console.WriteLine("Light directory searching"); SearchFilesInDirectories(new DirectoryInfo(@"C:\Sourcebank\Light")); Console.WriteLine("{0} files found", _files.Count.ToString(CultureInfo.InvariantCulture)); Console.WriteLine("Replace dictinary creating"); CreateReplaceList(); Console.WriteLine("{0} item added", _replaceList.Count.ToString(CultureInfo.InvariantCulture)); Console.Write("Replacement doing"); for (int i = 0; i < _files.Count; i++) { var fileInfo = _files[i]; Console.CursorLeft = 0; Console.Write("{0} of {1}", i.ToString(CultureInfo.InvariantCulture), _files.Count.ToString(CultureInfo.InvariantCulture)); ReplaceInFile(fileInfo.FullName); } Console.CursorLeft = 0; Console.Write("Replacement done"); } private static void SearchFilesInDirectories(DirectoryInfo dir) { if (!dir.Exists) return; foreach (DirectoryInfo subDirInfo in dir.GetDirectories()) SearchFilesInDirectories(subDirInfo); foreach (var fileInfo in dir.GetFiles()) _files.Add(fileInfo); } private static void CreateReplaceList() { _replaceList.Add("Color=\"#FFF78A09\"", "Color=\"{DynamicResource AccentColor}\""); _replaceList.Add("Color=\"{StaticResource ColorHot}\"", "Color=\"{DynamicResource AccentColor}\""); _replaceList.Add("Color=\"#FFCC0000\"", "Color=\"{DynamicResource AccentColor}\""); _replaceList.Add("To=\"#FFCC0000\"", "To=\"{DynamicResource AccentColor}\""); _replaceList.Add("To=\"#FFF78A09\"", "To=\"{DynamicResource AccentColor}\""); _replaceList.Add("Background=\"#FFF78A09\"", "Background=\"{DynamicResource Accent}\""); _replaceList.Add("Foreground=\"#FFF78A09\"", "Foreground=\"{DynamicResource Accent}\""); _replaceList.Add("BorderBrush=\"#FFF78A09\"", "BorderBrush=\"{DynamicResource Accent}\""); _replaceList.Add("Value=\"#FFF78A09\"", "Value=\"{DynamicResource Accent}\""); _replaceList.Add("Fill=\"#FFF78A09\"", "Fill=\"{DynamicResource Accent}\""); } public static void ReplaceInFile(string filePath) { string content; using (var reader = new StreamReader(filePath)) { content = reader.ReadToEnd(); reader.Close(); } content = _replaceList.Aggregate(content, (current, item) => current.Replace(item.Key, item.Value)); using (var writer = new StreamWriter(filePath)) { writer.Write(content); writer.Close(); } } } } 
  • Логические операторы в C
  • Что такое заголовок ?
  • Подсчитать количество понедельников в заданный диапазон дат
  • Что делает метод registerNatives ()?
  • Что происходит, когда переменная выходит за frameworks?
  • C # Перемещение перетаскивания не работает на Windows 7
  • Разность C # между == и Equals ()
  • Преобразование общего списка в строку CSV
  • Почему мы копируем, а затем двигаемся?
  • Получить IP-адрес локального компьютера
  • Разрешаем целочисленные переполнения со знаком в C / C ++
  • Давайте будем гением компьютера.