在文件中的确切位置找到了字符串

时间:2012-12-04 07:06:07

标签: c#

我需要知道.txt文件中的确切位置是否有字符串。 我知道如何使用Contains方法找到具体的字符串,但由于我不需要搜索整个文件(字符串将始终位于同一位置),我正在尝试找到最快的解决方案。

if (searchedText.Contains(item))
{
   Console.WriteLine("Found {0}",item);
   break;
}

由于

2 个答案:

答案 0 :(得分:2)

如果它是UTF-8并且不保证是ASCII,那么你只需要阅读相关的字符数。类似的东西:

 using (var reader = File.OpenText("test.txt"))
 {
     char[] buffer = new char[16 * 1024];
     int charsLeft = location;
     while (charsLeft > 0)
     {
         int charsRead = reader.Read(buffer, 0, Math.Min(buffer.Length,
                                                         charsLeft));
         if (charsRead <= 0)
         {
             throw new IOException("Incomplete data"); // Or whatever
         }
         charsLeft -= charsRead;
     }
     string line = reader.ReadLine();
     bool found = line.StartsWith(targetText);
     ...
 }

注意:

  • 就从目标位置开始读取整行而言,这是低效的。这比循环更简单,以确保读取正确的数据,但如果你有真正长行的文件,你可能想要调整它。
  • 此代码不能处理不在BMP(基本多语言平面)中的字符。它将它们视为两个字符,因为它们被读作两个UTF-16代码单元。这不太可能影响你。

答案 1 :(得分:1)

if(searchedText.SubString(i, l).Contains(item))

其中i是起始索引,l是您要搜索的字符串的长度。
由于您使用的是Contains,因此l中有一些余量。