有一个我用StreamReader读取的FileStream(它是一个非常大的文件),如何设置FileStream的Seek位置到某个子串的第一次出现,这样我就可以开始从一个子文件中读取这个大文件给定点?
由于
答案 0 :(得分:6)
文件中有什么内容?只是Unicode文本行?那你就有问题了。
在你至少读过所有前面的行之前,你永远不会知道行开头的位置。除非文件以UTF-32编码,否则每个字符可能需要可变数量的字节来表示它。每一行都有一个可变长度。
您可以做的最好的事情是扫描文件一次,然后在索引中记下行开头的位置。
答案 1 :(得分:4)
FileStream
无法搜索到你。您必须手动搜索它。您可能希望使用有效的字符串搜索算法,例如Knuth Morris Pratt。
答案 2 :(得分:1)
也许这可以提供帮助(使用.NET Framework构建正则表达式流搜索):
答案 3 :(得分:0)
如果您的意思是第一次阅读文件,那么您必须阅读以了解(特定字符串)的位置。下次如果文件内容没有改变,你可以记住这个位置(在某个变量中用于同一个程序运行),设置流位置并开始读取它。
答案 4 :(得分:-1)
查看MSDN上的this示例
filestream=new FileStream(s.Substring(s.IndexOf("string"),s.Length),FileMode.Open,FileAccess.Read);