[英]String.Contains gives wrong values
我正在嘗試創建一個搜索文件的應用程序,就像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”,並且該程序在搜索文本文件時有效。
很高興您找到了解決方案。
我仍然希望看到一些令人討厭的“誤報”文件,以便能夠查看。
在此期間,雖然有點切線,但仍然有意義,但我將txt
函數更改為:
private bool txt(string file, string q)
{
string contents = "";
using (TextReader read = new StreamReader(file))
{
contents = read.ReadToEnd();
}
return contents.ToLower().Contains(q);
}
這樣清潔。
編輯:
好吧,它們返回true的原因是因為這些文件中確實包含字符串“ Test”,特別是: MSI
中的[CCP_ TEST RMCCPSearchValidateProductIDSetODBCFoldersAllocateRegistrySpaceNOT]和dll
中的[OnUpda teSt ring]。 因此, String.Contains()
正常工作。
因此,回到過濾您要搜索的內容。 給出已知文本結尾的列表,或者讓用戶選擇他想要的內容。
您可能要考慮的其他一些事項僅是搜索精確的單詞,因此對於OnUpdateString
, test
不會正確:)
我嘗試使用.Dll和exe文件,對我來說效果很好。 之所以如此,是因為文件中存在要搜索的值。 嘗試使用記事本打開文件並搜索值。
還嘗試搜索“ eafrd”之類的其他字符串而不是test(這是DLL或exe文件中可以存在的詞典詞)。它返回false。
還可以查看在記事本中打開的文件中是否有任何隨機單詞,然后嘗試搜索它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.