我有一个函数来检索文本文件的最后n行(在本例中是一个日志文件):
function Get-Tail([object]$reader, [int]$count = 10) {
$lineCount = 0
[long]$pos = $reader.BaseStream.Length - 1
while($pos -gt 0)
{
$reader.BaseStream.position=$pos
if ($reader.BaseStream.ReadByte() -eq 10)
{
$lineCount++
if ($lineCount -ge $count) { break }
}
$pos--
}
# tests for file shorter than requested tail
if ($lineCount -lt $count -or $pos -ge $reader.BaseStream.Length - 1) {
$reader.BaseStream.Position=0
} else {
$reader.BaseStream.Position = $pos+1
}
# debug
write-host $reader.readtoend()
[....]
}
陷阱写入主机我发现$ pos是166(即在EndOfStream之前)。
这个输出是:
2013/02/23 03:39:13 ERROR 2 (0x00000002) Accessing Source Directory \\[redacted]
The system cannot find the file specified. -------------------------------------------------------------------------------
Started : Sat Feb 23 03:39:13 2013
Source : [redacted]
Dest : [redacted]
Files : *.*
Options : *.* /FFT /V /TS /FP /NDL /TEE /S /E /COPY:DATS /SECFIX /PURGE /MIR /B /NP /XO /XN /XC /R:0 /W:0
------------------------------------------------------------------------------
2013/02/23 03:39:13 ERROR 2 (0x00000002) Accessing Source Directory \\[redacted]
The system cannot find the file specified.
所以,重复最后两行。我已经尝试过冲洗streamreader,没有任何可能性。
这有点令人困惑。我假设我正在制作一个男生错误,但无法解决哪一个问题。有什么想法吗?
答案 0 :(得分:0)
如果你可以离开StreamReader,你可以使用这个简单的命令来检索文本文件中的最后x行。
Get-Content C:\example.txt -Tail 10