上一篇:c#中结构与类的区别 >>
C#初学乍练-文本替换工具命令行版
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);
相关文章:
- · 我的第一个C#程序!
- · 在C#中如何发送Email
- · 关于C#中虚方法重载的说明
- · OwnerDraw in C#
- · VB中類模塊實現與C++中類實現的比較(1)
- · C#中虛函數,抽象,接口的簡單説明
- · C#软件启动设计
- · 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- · C#下Socket对象的BeginReceive方法
- · [C#][正则表达式]寻找匹配的Groups的几种方法
- · C#程序员面试(一)答案
- · 使用智能设备扩展在 C# 中开发自定义控件
- · C#规范漫谈
- · Simple Image Slide Show C# edition
- · 用C#制作作屏幕捕获程序
- · 让窗体飘动起来--C#中Timer组件用法
- · C#做托盘程序
- · 三值逻辑的C#实现
- · 关于C#中的结构(下)
- · C#函数的参数中返回结构数组
- · C#异常处理机制初步
- · c#高級編程記錄--第一章
- · 关于C#中的结构
- · C#编程打造自己的IE浏览器
- · 用C#创建可拖动窗体
- · C#中的委托
- · C# variable criterion
- · C# FAQ
- · C#学习杂记
- · C#2.0的特性
- · 将控件中的数据输出保存到本地excel或word中,同时保存图片到本地(c#)
- · C#分析数据库结构,使用XSL模板自动生成代码
- · 捕捉DataGrid的双击事件(C#版本)
- · C#设计模式讨论——开篇闲话
- · C#如何取硬件标志
- · 使用C#制作《邮件特快专递》
- · 使用C#调用外部Ping命令获取网络连接情况
- · C# 编程规范
