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

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

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);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航