我的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);
}
}
}
答案 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)枚举值之一,它指定搜索操作应包含所有子目录还是仅包含当前目录。