我试图在c#代码中找到对SQL表的所有引用。解决方案中有500个表和数百个文件。我想最终得到的文件包含这样的分隔列表
表1,codefile.cs
表1,codefile2.cs
表2 codecode.cs
表3,codefile4.cs
我能想到的最好的答案是创建一个运行findstr的批处理文件,然后将数据整理到一个表中。我只是想知道是否有一种工具可以为我做这样的事情。 谢谢 KevCri
答案 0 :(得分:1)
假设
然后下面的批处理脚本应会为您提供所需的内容
@echo off
>tableReferences.txt (
for /f "usebackq delims=" %%T in ("tables.txt") do (
for /f "delims=" %%F iin ('findstr /mirc:"\<%%T\>" *.cs') do (
echo %%T, %%F
)
)
)
如果需要搜索文件层次结构,则将/ S添加到FINDSTR选项中。
答案 1 :(得分:0)
我会写这样的C#程序。
注意:
确保传递项目/解决方案目录代替Directory.GetCurrentDirectory()
。
static void Main(string[] args)
{
List<string> TableNames = new List<string>() { "Table1", "Table3", "Table5", "Table7" };
var files = Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.cs", SearchOption.AllDirectories);
List<string> results = new List<string>();
foreach (var file in files)
{
using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
{
using (StreamReader sr = new StreamReader(fs))
{
var contents = sr.ReadToEnd();
var result = TableNames.FindAll(contents.Contains);
if (result.Count > 0)
{
var fileName = Path.GetFileName(file);
foreach (var table in result)
{
results.Add(string.Format("{0},{1}", table, fileName));
}
}
}
}
}
Console.ReadLine();
}
并根据需要将results
写入文件:
File.WriteAllLines("Output.txt", results.ToArray());