C#:String.IndexOf到FileStream.Seek

C#:String.IndexOf到FileStream.Seek,c#,C#,使用StreamReader读取文件流(这是一个非常大的文件),如何将文件流的查找位置设置为某个子字符串的第一次出现,以便从给定点开始读取这个大文件 谢谢看看MSDN上的示例 filestream=new FileStream(s.Substring(s.IndexOf("string"),s.Length),FileMode.Open,FileAccess.Read); 看一看MSDN上的示例 filestream=new FileStream(s.Substring(s.IndexOf("

使用StreamReader读取文件流(这是一个非常大的文件),如何将文件流的查找位置设置为某个子字符串的第一次出现,以便从给定点开始读取这个大文件

谢谢

看看MSDN上的示例

filestream=new FileStream(s.Substring(s.IndexOf("string"),s.Length),FileMode.Open,FileAccess.Read);
看一看MSDN上的示例

filestream=new FileStream(s.Substring(s.IndexOf("string"),s.Length),FileMode.Open,FileAccess.Read);

档案里有什么?只有几行Unicode文本?那你就有问题了

在至少阅读一次之前的所有行之前,您永远不会知道行首的位置。除非文件是以UTF-32编码的,否则每个字符可能会采用可变的字节数来表示它。每条线的长度都是可变的


你能做的最好的事情就是扫描文件一次,然后在索引中记下行首的位置。

文件中有什么?只有几行Unicode文本?那你就有问题了

在至少阅读一次之前的所有行之前,您永远不会知道行首的位置。除非文件是以UTF-32编码的,否则每个字符可能会采用可变的字节数来表示它。每条线的长度都是可变的


您所能做的最好的方法是在文件中扫描一次,然后在索引中记下行首的位置。

FileStream
无法为您进行搜索。您必须手动搜索它。您可能需要使用高效的字符串搜索算法,例如。

FileStream
无法为您执行搜索。您必须手动搜索它。可能您需要使用一种高效的字符串搜索算法,例如。

如果您是指第一次读取文件,那么您必须阅读才能知道(特定字符串)的位置。下次如果文件的内容没有改变,你可以记住这个位置(在同一个程序运行中使用的某个变量中),设置流位置并开始读取它。

如果你是指第一次读取文件,那么你必须读取才能知道(特定字符串的)位置。下次如果文件内容没有改变,您可以记住这个位置(在同一程序运行中使用的某个变量中),设置流位置并开始读取它。

也许这会有帮助(使用.NET Framework构建正则表达式流搜索):

这可能会有所帮助(使用.NET Framework构建正则表达式流搜索):


那篇文章是关于锁定文件的一部分。不确定它与这个问题有什么关系?…我不知道你认为FileStream构造函数在做什么。那篇文章是关于锁定文件的一部分。不确定它与这个问题有什么关系?…我不知道您认为FileStream构造函数在做什么。