2009-08-04 10 views
1

StreamReaderで読み込んだFileStream(非常に大きなファイルです)を持つ場合、FileStreamのSeek位置を特定の部分文字列が最初に出現するように設定する方法私は与えられた点からこの大きなファイルを読むことができますか?C#:String.IndexOf to FileStream.Seek

おかげ

答えて

6

thisの例を見てみましょうか? Unicodeテキストだけの行ですか?それから問題があります。

すべての前の行を少なくとも1回読み取るまで、行の開始位置を知ることはできません。ファイルがUTF-32でエンコードされていない限り、各文字は可変バイト数で表現できます。各行は可変長です。

あなたができることは、ファイルを1回スキャンしてから、インデックスの行の開始位置を書き留めることです。

-1

は、ファイルには何がMSDN

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

記事は、ファイルの一部をロックについてであること。どのようにそれが質問に関連しているか分かりませんか?... –

+0

そして、私はあなたがFileStreamコンストラクタが何をしていると思いますか分かりません。 –

4

FileStream検索ができません。手動で検索する必要があります。おそらく、Knuth Morris Prattのような効率的な文字列検索アルゴリズムを使用したいと思うでしょう。

0

初めてファイルを読むときは、(特定の文字列の)位置を知るために読まなければなりません。次回は、ファイルの内容が変更されていない場合は、この位置を思い出すことができます(同じ実行プログラムで使用する変数によっては)、ストリームの位置を設定して読み込みを開始します。