如何使用C#读取所有文件内容并在文件内容中查找字符串?

时间:2016-03-02 05:36:43

标签: c# readfile string-comparison

我在files数组中有.aspx,.cs,.htmlstring等)列表。 我阅读了file的所有内容。直到这里还可以!

我想要做的是搜索特定字符串

EG:

<meta name="description" content="NOINDEX" />
<meta name="keywords" content="NOINDEX" />

循环浏览文件列表并获取文件内容,并检查它是否contains 搜索字符串

foreach (string item in strFiles)
                {
                    innerList = item.Split(',');
                    if(!string.IsNullOrEmpty(innerList[0]))
                    {
                        fileList.Add(innerList[0]);
                        fileContents = File.ReadAllText(innerList[0].Replace("\\\\","\\"));
                        //if(fileContents.Contains(""))
                        if (fileContents.IndexOf(strToSearch) != -1)
                        {
                            Console.WriteLine("string contains strsearch");
                        }
                    }
                }

上面的代码遍历所有files并逐个读取所有文件的内容,但是,我无法从文件内容中比较/找到确切的字符串。

由于文件内容/新行字符等的额外空间。

示例&#39; fileContent&#39;字符串:

<%@ Page Title="" Language="C#" MasterPageFile="~/_masterpages/MasterPage.master" AutoEventWireup="true" CodeFile="ChangePassword.aspx.cs" Inherits="Account_ChangePassword" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<meta name="description" content="NOINDEX" />
<meta name="keywords" content="NOINDEX" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentHeaderNav" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentBody" Runat="Server">
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="ContentToggleBox" Runat="Server">
</asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="ContentBottom" Runat="Server">
</asp:Content>

示例&#39; searchString&#39; :

<meta name="description" content="NOINDEX" /><meta name="keywords" content="NOINDEX" />

请提出任何建议......!

帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式搜索替换

foreach (string item in strFiles)
                {
                    innerList = item.Split(',');
                    if(!string.IsNullOrEmpty(innerList[0]))
                    {
                        fileList.Add(innerList[0]);
                        fileContents = File.ReadAllText(innerList[0].Replace("\\\\","\\"));
                        if(Regex.IsMatch(fileContents,@"<meta[^>]*name=""description""[^>]*content=""NOINDEX""[^*]*/>\s*<meta[^>]*name=""keywords""[^>]*content=""NOINDEX""[^*]*/>"))
                           { Console.WriteLine("string contains strsearch");
}
                        }
                    }
                }

如果您想要替换它,您可以使用:

Regex.Replace(fileContents,@"<meta[^>]*name=""description""[^>]*content=""NOINDEX""[^*]*/>\s*<meta[^>]*name=""keywords""[^>]*content=""NOINDEX""[^*]*/>", ReplacementString)

答案 1 :(得分:1)

我不久前做了类似的事情,当时我写了一个小应用程序来查找隐藏在其他英语单词中的英语单词,然后如果你删除了&#34; inner&#34;来自&#34;外部&#34;如果结果仍然是英文单词(是的,我有时会感到无聊)

结果是我认为与您相关的小博客帖子,主要是因为我正在加载TON文件并进行搜索。

Here is the blogpost

正如你所看到的,我确实使用了并行执行来加速这个过程,这让我的结果不到50毫秒,这在我的书中是可以接受的:)

希望这能满足您的需求!