.netAPIを使用して大きなデータファイルを検索しようとしています。どういうわけか私はそれを動かすことができません。これが私のコードです:
function check_logs{
$pos = 8192
$count = 1
$path = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG.2'
$br = 0
$reader = [System.IO.File]::OpenText($path)
$reader.DiscardBufferedData()
$reader.BaseStream.Seek(0, [System.IO.SeekOrigin]::Begin)
for(;;){
$line = $reader.ReadLine()
if($line -ne $null){$br = $br + [System.Text.Encoding]::UTF8.GetByteCount($line)}
if($line -eq $null -and $count -eq 0){break}
if($line -eq $null){$count = 0}
elseif($line.Contains(' Error:')){
Write-Host "$line $br"
}
}
}
seekメソッドのパラメーターとして0を使用すると、期待どおりに最初からシークしますが、読み取った行を書き込む前にコンソールに0を書き込みます。例:
0
2011-08-31 09:26:36.31 Logon Error: 17187, Severity: 16, State: 1. 4101
2011-08-31 09:26:36.32 Logon Error: 17187, Severity: 16, State: 1. 4489
2011-08-31 09:26:38.25 Logon Error: 17187, Severity: 16, State: 1. 4929
2011-08-31 09:26:38.25 Logon Error: 17187, Severity: 16, State: 1. 5304
2011-08-31 09:26:43.75 Logon Error: 17187, Severity: 16, State: 1. 6120
0の代わりに4096を使用してシークしようとすると、次のように書き出されるだけです。
4096
最初の2つを除いて、最初の行と同じ行を書き出すと思いました。
誰かが問題を見ることができますか?私はこれに私を導いた別の質問がありました。さらなる背景については、これを参照してください
編集:まだこれを理解しようとしています。この問題に関する情報を他にどこで見つけられるか知っている人はいますか?Microsoftのスクリプト担当者に質問を送信することはできますか?
よろしくお願いします
ギスリ