I've often remembered using the "tail" command in Linux and thought I could use the same thing in Windows. I've never been able to find a suitable Win32 replacement for the old utility so I had to roll my own. The only use I've found for the program is monitoring log files.
Using the code
There is very little code required to read the changes from a given file. The most notable piece from below is the way that the
FileStream is created to read files that may be open by other processes. If you try to use the
StreamReader's constructor to open a file in use by another process, you will get an exception. Of course, being able to read open files was crucial to this utility.
using ( StreamReader reader = new StreamReader(new FileStream(fileName,
FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) )
long lastMaxOffset = reader.BaseStream.Length;
while ( true )
if ( reader.BaseStream.Length == lastMaxOffset )
string line = "";
while ( (line = reader.ReadLine()) != null )
lastMaxOffset = reader.BaseStream.Position;