2017-06-27 9 views
2

ファイルをいくつか処理する必要があり(主にログファイル)、各行にregexを使用する必要があります。私はC#特定の行のファイルの読み込みを開始する

using (FileStream fs = File.Open("logs.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (BufferedStream bs = new BufferedStream(fs)) 
using (StreamReader sr = new StreamReader(bs)) 
{ 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     // use regex and add create new file.. 
    } 
} 

しかし、私は同様に「名前の変更」を持っているので、誰かが自分の名前を変更した場合、私は他の名前この時点で、再びログを処理する必要がログにしてください。それは私がこれをする時間を節約することができるように、それは特定の行から読み始めてもいいですか?

+0

string line - >代わりにstringbuilderを使用します。文字列行= File.ReadLines(FileName).Skip(14).Take(1).First(); – cutzero

+0

@cutzeroありがとう私はそれを試します – user1546616

+0

あなたは次のパスでピックアップする場所を覚えて、[シーク関数](https://stackoverflow.com/a/5404324/1132334)を使用して – dlatikay

答えて

1

は、特定のラインに求める全く機能はありませんが、あなたは、特定のオフセット(バイト位置)に求めることができます。 File.ReadLines().Skip()アプローチがありますが、それでも.NET Frameworkのcurrent implementationのすべての行が読み込まれます。

ファイルの処理を停止するときは、現在のオフセットを保存してください。後でそこからピックアップしたいときは、格納されたオフセットにSeekを当てることができます(もちろん、格納されたオフセットがパス間で変更される前にファイルの一部が安全に仮定できる場合にのみ有効なアプローチです)。可能性のある実装については、

Read thisです。

関連する問題