[Problem]
I manage build servers at my company and somehow the build process
generated a huge text file. The size was well over 600MB and opening
it in Notepad would not have been an option. I didn't even try. So I
had to come up with a way to peek at the last part of the huge text
file.
[Solution]
I thought of Get-Content Cmdlet, but I couldn't find any option that
allowed me to read text file from the bottom. So I turned to .NET
Framework. Here is the code. Please change $TextFilePath and
$BytesToRead as you see fit and please feel free to suggest anything
if there is better to accomplish this.
$TextFilePath = "D:\Temp\HugeTextFile"
$BytesToRead = 2048
$fs = [System.IO.File]::OpenRead($TextFilePath)
$fs.Position = $fs.Length - $BytesToRead
$sr = New-Object System.IO.StreamReader($fs)
$text = $sr.ReadToEnd()
$sr.Close()
$fs.Close()
$text
I've also wanted the last M liines in a file while this may not do exactly
that for practical purposes its much faster than reading the entire file just
to return the last 10 lines.
Like you said you can aways adjust the bytes to read
> I've also wanted the last M liines in a file while this may not do exactly
> that for practical purposes its much faster than reading the entire file just
> to return the last 10 lines.
I guess it depends on what kind of text file you have. I personally
think it's safer to return certain number of bytes rather than number
of lines because the text file could be an XML file that has only one
line. In that case, you would be reading the entire file.
I was thinking... Maybe I could make this a custom Cmdlet. Hmm... but
it may be worth it because you can accomplish this in such a small
amount of effort accessing .NET Framework. I hope PowerShell team will
include this kind of Cmdlet in the next release.
oops, I meant it may NOT be worth it.