搜索目录和子目录中包含特定字符串的所有文件并删除字符串

时间:2019-04-17 06:45:55

标签: c#

我的Web服务器上的许多PHP文件已被破坏。我需要找到有问题的代码并删除问题代码。手动操作耗时太长。

计划是提供顶层目录,并使控制台应用程序搜索该目录中的所有文件(包括子目录中的文件),并删除每个文件中的行。

我的代码在下面,它可以工作,但是似乎无法浏览所有目录。文件已正确更新,但子目录内部的文件未正确更新。我不确定我要去哪里错。任何援助将不胜感激。

public static string check_path = string.Empty;
public static string log_folder = string.Empty;
public static string extension = string.Empty;

static void Main(string[] args)
{
    if (args == null || args.Length < 1)
    {
        Console.WriteLine("Invalid Syntax");
        return;
    }
    else
    {
        shakaka(args[0]);
    }
}


public static void shakaka(string check_fol)
{
    if (Directory.Exists(check_fol))
    {
        string[] folders = Directory.GetDirectories(check_fol);
        foreach (string folder in folders)
        {
            string[] files = Directory.GetFiles(folder);
            foreach (string file in files)
            {
                extension = Path.GetExtension(file);
                if (extension == ".php")
                {
                    var oldLines = System.IO.File.ReadAllLines(file);
                    var newLines = oldLines.Where(line => !line.Contains("/*457563643*/"));
                    System.IO.File.WriteAllLines(file, newLines);
                    Console.WriteLine("Updated: " + file);
                }
                else
                {
                    Console.WriteLine("Not a PHP File: " + file);
                }
            }
        }

    }
    else
    {
        Console.WriteLine("Directory Doesn't Exist: " + check_fol);
    }
}

}

1 个答案:

答案 0 :(得分:1)

您要做的是正确使用接受三个参数的重载方法Directory.GetFiles()。即string path, string searchPattern, System.IO.SearchOption searchOption

修改后的代码如下:

string[] files = Directory.GetFiles(folder,"*.php", System.IO.SearchOption.AllDirectories);

这里

  

第一个参数(路径)指定相对或绝对路径   到要搜索的目录。该字符串不区分大小写。

     

第二个参数(searchPattern)与路径中文件名匹配的搜索字符串。此参数可以包含有效文字路径和通配符(*和?)字符的组合,但不支持正则表达式。 *在您的情况下,您仅需要.php个文件,因此应为*.php

     

最后一个参数(SearchOption)枚举值之一,它指定搜索操作应包含所有子目录还是仅包含当前目录。