C#:String.IndexOf到FileStream.Seek

时间:2009-08-04 11:39:25

标签: c#

有一个我用StreamReader读取的FileStream(它是一个非常大的文件),如何设置FileStream的Seek位置到某个子串的第一次出现,这样我就可以开始从一个子文件中读取这个大文件给定点?

由于

5 个答案:

答案 0 :(得分:6)

文件中有什么内容?只是Unicode文本行?那你就有问题了。

在你至少读过所有前面的行之前,你永远不会知道行开头的位置。除非文件以UTF-32编码,否则每个字符可能需要可变数量的字节来表示它。每一行都有一个可变长度。

您可以做的最好的事情是扫描文件一次,然后在索引中记下行开头的位置。

答案 1 :(得分:4)

FileStream无法搜索到你。您必须手动搜索它。您可能希望使用有效的字符串搜索算法,例如Knuth Morris Pratt

答案 2 :(得分:1)

也许这可以提供帮助(使用.NET Framework构建正则表达式流搜索):

http://www.developer.com/design/article.php/10925_3719741_3/Building-a-Regular-Expression-Stream-Search-with-the-NET-Framework.htm

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

查看MSDN上的this示例

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