0

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

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

谢谢

4

2 回答 2

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 代码单元。这不太可能影响您。
于 2012-12-04T07:18:19.603 回答
1
if(searchedText.SubString(i, l).Contains(item))

wherei是起始索引,l 是您要搜索的字符串的长度。
由于您使用的是 Contains,因此您在l.

于 2012-12-04T07:09:59.493 回答