<p>If I'm reading a text file in shared access mode and another process truncates it, what is the easiest way to detect that?  (I'm excluding the obvious choice of refreshing a FileInfo object periodically to check its size)  Is there some convenient way to capture an event?  (Filewatcher?)</p>

There is,
It's called
FileSystemWatcher
.
If you are developing a windows forms application, you can drag-and-drop it from the toolbox.
Here's some usage example:
```
```
private void myForm_Load(object sender, EventArgs e)
{
    var fileWatcher = new System.IO.FileSystemWatcher();

    // Monitor changes to PNG files in C:\temp and subdirectories
    fileWatcher.Path = @"C:\temp";
    fileWatcher.IncludeSubdirectories = true;
    fileWatcher.Filter = @"*.png";

    // Attach event handlers to handle each file system events
    fileWatcher.Changed += fileChanged;
    fileWatcher.Created += fileCreated;
    fileWatcher.Renamed += fileRenamed;

    // Start monitoring!
    fileWatcher.EnableRaisingEvents = true;
}

void fileRenamed(object sender, System.IO.FileSystemEventArgs e)
{
    // a file has been renamed!
}

void fileCreated(object sender, System.IO.FileSystemEventArgs e)
{
    // a file has been created!
}

void fileChanged(object sender, System.IO.FileSystemEventArgs e)
{
    // a file is modified!
}
```
```
It's in System.IO and System.dll so you should be able to use it in most type of projects.