C#初学乍练-文本替换工具命令行版

介绍了一款使用正则表达式实现的批量文件内容替换工具,支持广度优先遍历目录并处理指定类型的文件,如SQL脚本。工具提供备份选项,并详细展示了替换过程中的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 该程序使用正则表达式进行文字替换,广度优先遍历子目录(基础知识很重要), 解决无法替换回车换行的问题
class Replacee
{

/// <summary>
/// 替换文件中字符
/// </summary>
/// <param name="fileFullName">文件全名</param>
/// <param name="replacedBy">用于替换的字符串</param>
/// <param name="findPattern">用于查找的字符串</param>
/// <param name="isBackup">是否备份文件</param>
private static void DoReplace(string fileFullName, string replacedBy, string findPattern, bool isBackup)
{
string result = string.Empty;
string inputText = string.Empty;
string replacement = replacedBy;
string pat = findPattern;
Regex r = new Regex(pat, RegexOptions.IgnoreCase);

try
{
using (StreamReader sr = new StreamReader(fileFullName))
{
inputText = sr.ReadToEnd();
}

// Compile the regular expression.
if (r.IsMatch(inputText))
{
if (isBackup == true)
{
try
{
File.Copy(fileFullName, fileFullName + ".bak");
}
catch(System.IO.IOException ex)
{
File.Copy(fileFullName, fileFullName + ".bak", true);
Console.WriteLine(ex.Message);
}
}
result = r.Replace(inputText, replacement);

// Add some text to the file.
using (StreamWriter sw = new StreamWriter(fileFullName))
{
sw.Write(result);
}
}
Console.WriteLine(fileFullName);
}
catch (Exception e)
{

Console.WriteLine("The process failed: {0}", e.ToString());
//throw(e);
}
}

/// <summary>
/// 遍历目录
/// </summary>
/// <param name="path">起始路径</param>
/// <param name="replacedBy">用于替换的字符串</param>
/// <param name="findPattern">用于查找的字符串</param>
/// <param name="isBackup">是否备份文件</param>
/// <param name="isGetSubFloder">是否获取子文件夹</param>
public static void TravelReplace(string path, string replacedStr, string findPattern, bool isBackup, bool isGetSubFloder)
{
Queue queue = new Queue();
DirectoryInfo di = null;
string subPath = string.Empty;
string currentPath = string.Empty;
FileSystemInfo[] dirs = null;

queue.Enqueue(path);
while (queue.Count > 0)
{
currentPath = (string)queue.Dequeue();
di = new DirectoryInfo(currentPath);

//get files under current directiory
FileSystemInfo[] files = di.GetFiles("*.sql");
foreach (FileSystemInfo f in files)
{
DoReplace(f.FullName, replacedStr, findPattern, isBackup);
}

// Get only subdirectories
if (isGetSubFloder == true)
{
dirs = di.GetDirectories();
foreach (FileSystemInfo d in dirs)
{
subPath = d.FullName;
queue.Enqueue(subPath);
Console.WriteLine(subPath);
}
}
}
}
}

测试:
Replacee.TravelReplace(@"E:/temp/ttt", "/r/n);", @"(/r/n){2,}/);", true, true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值