A test for analysize text

本文介绍了一个用于检测源代码中硬编码的工具实现。该工具通过解析项目文件结构,获取项目列表及每个项目的文件列表,并进一步分析文件内容寻找硬编码实例。文章提供了具体的C#代码示例,展示了如何遍历目录、读取项目文件、获取文件路径和分析文件内容。

 

using

 

 

 

System;

 

 

using

 

 

 

System.Collections.Generic;

 

 

using

 

 

 

System.Linq;

 

 

using

 

 

 

System.Text;

 

 

using

 

 

 

System.Xml;

 

 

using

 

 

 

System.IO;

 

 

namespace

 

 

 

HardCode

{

 

 

 

 

publicclass

 

HardCodeInfo

 

 

 

{

 

 

 

publicint

lineNo;

 

 

 

publicstring

hardCode;

 

 

 

publicstring

type;

}

 

 

 

 

publicclass

 

AnalysizeHardCode

 

 

 

{

 

 

 

List<string> projectsList = newList<string

>();

 

 

 

Dictionary<string, List<string>> projectCache = newDictionary<string, List<string

>>();

 

 

 

Dictionary<string, List<string>> filesCache = newDictionary<string, List<string

>>();

 

 

 

 

 

//return string is the project name

 

 

 

 

 

publicList<string

> GetProjectsList()

{

 

 

 

 

return

projectsList;

}

 

 

 

 

publicList<string> GetFilesList(string

projectKey)

{

 

 

 

 

return

projectCache[projectKey];

}

 

 

 

 

publicList<string> GetHardcodeList(string

fileKey)

{

 

 

 

 

return

filesCache[fileKey];

}

 

 

 

 

publicbool GetCurrentDirFiles(string

dir)

{

 

 

 

 

 

 

try

 

 

 

{

 

 

 

foreach (string files inDirectory

.GetFiles(dir))

{

 

 

 

 

if (files.Trim().EndsWith(".csproj"

))

{

 

projectsList.Add(files);

 

}

 

 

 

 

 

 

//System.Console.WriteLine("files {0} files", files);

 

 

 

}

 

}

 

catch(Exception

ex)

{

 

System.

 

 

Console.WriteLine("{0}"

, ex.Message);

 

 

 

returnfalse

;

}

 

 

 

 

returntrue

;

 

 

}

 

 

 

 

publicbool GetAllProjects(string

dir)

{

 

 

 

 

 

 

try

 

 

 

{

 

 

 

foreach (string directory inDirectory

.GetDirectories(dir))

{

 

GetAllProjects(directory);

 

 

 

 

 

 

//System.Console.WriteLine("direc {0} direc", directory);

 

 

 

 

 

foreach (string files inDirectory

.GetFiles(directory))

{

 

 

 

 

if (files.Trim().EndsWith(".csproj"

))

{

 

projectsList.Add(files);

 

}

 

 

 

 

 

 

//System.Console.WriteLine("files {0} files", files);

 

 

 

}

 

}

 

 

 

}

 

catch(Exception

e)

{

 

System.

 

 

Console.WriteLine("{0}"

, e.Message);

 

 

 

returnfalse

;

}

 

 

 

 

returntrue

;

}

 

 

 

 

publicstring GetDirPath(string

filename)

{

 

 

 

 

int position = filename.LastIndexOf('\\'

);

 

 

 

if

(position == -1)

{

 

 

 

 

return"ff"

;

}

 

 

 

 

return

filename.Substring(0, position);

 

 

}

 

 

 

 

publicbool GetProjectFiles(string

fileName)

{

 

 

 

 

List<string > tmFiles = newList<string

>();

 

 

 

XmlDocument xmlDoc = newXmlDocument

();

 

 

 

string

dir = GetDirPath(fileName);

 

 

 

 

 

try

 

 

 

{

 

xmlDoc.Load(fileName);

 

 

 

 

 

XmlNamespaceManager nsMgr = newXmlNamespaceManager

(xmlDoc.NameTable);

nsMgr.AddNamespace(

 

 

"ns", "http://schemas.microsoft.com/developer/msbuild/2003"

);

 

 

 

XmlNodeList xnl = xmlDoc.SelectNodes("/ns:Project/ns:ItemGroup/ns:Compile[@Include]"

, nsMgr);

 

 

 

foreach (XmlElement node in

xnl)

{

 

 

 

 

 

 

//System.Console.WriteLine(" content {0} content ", node.GetAttribute("Include"));

 

 

 

tmFiles.Add(dir +

 

"\\" + node.GetAttribute("Include"

));

 

 

 

if (node.GetAttribute("Include") == "Resources.Designer.cs"

)

{

 

 

 

 

XmlNode xn = node.SelectSingleNode("/ns:Project/ns:ItemGroup/ns:Compile/ns:DependentUpon"

,nsMgr);

 

 

 

 

 

//System.Console.WriteLine(" res {0} res ", node.InnerText);

 

 

 

tmFiles.Add( dir +

 

"\\"

+ node.InnerText);

}

 

}

 

projectCache.Add(fileName, tmFiles);

 

}

 

 

 

 

catch (Exception

e)

{

 

System.

 

 

Console.WriteLine("{0}"

, e.Message);

 

 

 

returnfalse

;

}

 

 

 

 

returntrue

;

}

 

 

 

 

 

 

//return Dictornary for project and file list

 

 

 

 

 

publicbool GetFileHards(string

strFileName)

{

 

 

 

 

List<HardCodeInfo> lhci = newList<HardCodeInfo

>();

 

 

 

string strTxt = ""

;

 

 

 

StreamReader fileStream = null

;

 

 

 

 

 

try

 

 

 

{

 

fileStream =

 

newStreamReader(strFileName, System.Text.Encoding

.Default);

 

 

 

int

lineCount = 0;

 

 

 

while

(!fileStream.EndOfStream)

{

 

lineCount++;

 

strTxt = fileStream.ReadLine().Trim();

 

 

 

 

//read line by line

 

 

 

 

 

 

 

//here need add process find hard code for line

 

 

 

 

 

 

 

//flag = processHardcode();

 

 

 

 

 

bool flag = false

;

 

 

 

if

( lineCount%17 == 1 )

{

 

 

 

 

HardCodeInfo hd = newHardCodeInfo

();

hd.lineNo = lineCount;

 

hd.type =

 

 

"need update"

;

hd.hardCode =

 

 

"rool not define"

;

lhci.Add(hd);

 

}

 

}

 

fileStream.Close();

 

fileStream.Dispose();

 

}

 

 

 

 

catch (Exception

e)

{

 

fileStream.Close();

 

fileStream.Dispose();

 

System.

 

 

Console.WriteLine("{0}"

, e.Message);

 

 

 

returnfalse

;

}

 

 

 

 

returntrue

;

}

 

}

 

}

 

///////////////

 

//test part

 

////////////

 

using

System;

 

using

 

 

 

 

System.Collections.Generic;

 

 

using

 

 

 

 

System.Linq;

 

 

using

 

 

 

 

System.Text;

 

 

 

 

namespace

 

 

 

 

HardCode

{

 

 

 

 

 

class

 

 

Program

 

 

 

{

 

 

 

 

staticvoid Main(string

 

[] args)

{

 

 

 

 

 

HardCodeInfo hci = newHardCodeInfo

 

();

 

 

 

 

AnalysizeHardCode ahc = newAnalysizeHardCode

 

();

 

 

 

 

 

 

//ahc.GetProjectFiles("C:\\mig\\TotalProject\\dev\\Iris.DataImport\\Iris.DataImport\\Iris.DataImport.csproj");

 

 

 

ahc.GetAllProjects(

 

 

"C:\\mig\\TotalProject\\dev"

 

);

ahc.GetCurrentDirFiles(

 

 

 

"C:\\mig\\TotalProject\\dev"

 

);

 

 

 

 

List<string

 

> result = ahc.GetProjectsList();

 

 

 

 

foreach (string file in

 

result)

{

 

System.

 

 

 

Console.WriteLine("{0}"

 

, file);

ahc.GetProjectFiles(file);

 

 

 

 

 

List<string

 

> inResult = ahc.GetFilesList(file);

 

 

 

 

foreach (string infile in

 

inResult)

{

 

 

 

 

 

 

 

//System.Console.WriteLine("files {0} files", infile);

 

 

 

}

 

}

 

System.

 

 

Console

 

.ReadLine();

}

 

}

 

 

 

 

 

}

 

i meet some question when i search node in xml document,

 

when i write recursion function, i just forget to retrive current dir files.

 

so it's a record just for myself

 

 

转载于:https://www.cnblogs.com/cquccy/archive/2011/09/28/2194748.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值