您的位置:首页 > 编程语言 > C#

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

2010-08-07 08:20 302 查看
 该程序使用正则表达式进行文字替换,广度优先遍历子目录(基础知识很重要), 解决无法替换回车换行的问题

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: