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; }