String.Contains给出错误的值

时间:2013-10-31 04:40:34

标签: c# windows file-search

我正在尝试创建一个搜索文件的应用程序,就像WindowsXP一样。我正在使用4个线程搜索指定的目录并打开每个文件来搜索字符串。这是通过从静态类调用静态方法来完成的。然后,该方法尝试找出扩展,并根据找到的扩展名通过私有方法运行它。我只创建了读取纯文本文件的可能性。 这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Searcher
{
    static public class Searching 
    {
        static public bool Query(string file, string q)
        {
            file = file.ToLower();

            if (file.EndsWith(".txt")) // plain textfiles
            {
                return txt(file, q);
            } // #####################################
            else if (file.EndsWith(".doc"))
            {
                return false;
            } // #####################################
            else if (file.EndsWith(".dll")) // Ignore these
            {
                return false;
            }
            else if (file.EndsWith(".exe")) // Ignore these
            {
                return false;
            }
            else // will try reading as a textfile
            {
                return txt(file, q);
            }
        }

        static private bool txt(string file, string q)
        {
            string contents;
            TextReader read = new StreamReader(file);
            contents = read.ReadToEnd();
            read.Dispose();
            read.Close();

            return contents.ToLower().Contains(q);
        }

        static private bool docx(string file, string q)
        {
            return false;
        }
    }
}

查询读取扩展名,然后转发处理。由于此时我只包含纯文本文件,因此不能选择多少。在搜索开始之前,我还告诉我的程序它需要读取所有可能的文件。

现在我的问题在于,尽管读者只能读取纯文本文件,但它还会读取图像和应用程序(.exe / .dll)。这是预期的,因为它试图阅读所有内容。奇怪的是,它返回一个匹配。我在Notepad ++中搜索了文件,但没有匹配。我也在文件读入'contents'变量后立即使用断点取出内容,然后尝试搜索,但没有匹配。所以这意味着String.Contains()方法不能很好地搜索内容,而这似乎相信给定的查询在文件中。

我希望有人知道问题是什么。我搜索的字符串是“test”,程序在搜索文本文件时有效。

1 个答案:

答案 0 :(得分:0)

我尝试了.Dll和exe文件,它对我来说很好。您将获得真实,因为您搜索的值存在于文件中。尝试用记事本打开文件并搜索值。

还尝试搜索其他字符串,如“eafrd”而不是test(这是一个可以出现在dll或exe文件中的字典单词)。它返回给我错误。

还可以查看您在记事本中打开的文件中的任何随机单词,然后尝试搜索它。