static void Main(string[] args) {
     var d1 = new DirTree(@"C:\",
         new DirTree(@"C:\Dir1",
             new DirTree(@"C:\Dir1\Dir2"),
             new DirTree(@"C:\Dir1\Dir3")
             ),
             new DirTree(@"C:\Dir4",
             new DirTree(@"C:\Dir4\Dir5"),
             new DirTree(@"C:\Dir4\Dir6")
             ));
     var path = @"D:\Dirs.dir";
     // write the directory tree to a file
     var file = new FileStream(path, FileMode.CreateNew | FileMode.Truncate);
     var w = new BinaryWriter(file);
     d1.WriteTo(w);
     w.Close();
     file.Close();
     // read it from the file
     var file2 = new FileStream(path, FileMode.Open);
     var rdr = new BinaryReader(file2);
     var d2 = new DirTree(rdr);
     // now inspect d2 in debugger to see that it was read back into memory
     // find files bigger than (roughly) 1GB
     var BigFiles = from f in f_results.FromFile(@"C:\SomeFile.dat")
                    where f.size > 1e9
                    select f;
 }