如何查找包含许多不同字符串的所有文件并进行记录(Windows)

时间:2018-07-31 19:48:57

标签: c# sql

我试图在c#代码中找到对SQL表的所有引用。解决方案中有500个表和数百个文件。我想最终得到的文件包含这样的分隔列表

表1,codefile.cs
表1,codefile2.cs
表2 codecode.cs
表3,codefile4.cs

我能想到的最好的答案是创建一个运行findstr的批处理文件,然后将数据整理到一个表中。我只是想知道是否有一种工具可以为我做这样的事情。 谢谢 KevCri

2 个答案:

答案 0 :(得分:1)

假设

  • 您在table.txt中有文件名,每行一张表
  • 所有.cs文件都位于当前目录中

然后下面的批处理脚本应会为您提供所需的内容

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