protected AggregateFileSystem GetCommonAggregateFileSystem(out MemoryFileSystem fs1, out MemoryFileSystem fs2, out MemoryFileSystem fs3) { // ---------------------------------------------- // This creates the following AggregateFileSystem // ---------------------------------------------- // /a -> fs2 // /a -> fs1 // a.txt -> fs1 // /b -> fs1 // b.i -> fs1 // /C -> fs2 // /d -> fs2 // a.txt -> fs2 // A.txt -> fs2 // b.txt -> fs2 // c.txt1 -> fs2 // d.i -> fs2 // f.i1 -> fs2 // E -> fs2 // /b -> fs1 // b.i -> fs1 // /C -> fs2 // /d -> fs3 // A.txt -> fs3 // b.txt -> fs2 // c.txt1 -> fs3 // d.i -> fs3 // f.i1 -> fs3 // E -> fs2 fs1 = new MemoryFileSystem() { Name = "mem0" }; CreateFolderStructure(fs1); fs2 = fs1.Clone(); fs2.Name = "mem1"; fs3 = fs2.Clone(); fs3.Name = "mem2"; // Delete part of fs2 so that it will fallback to fs1 fs2.DeleteDirectory("/a/a", true); fs2.DeleteDirectory("/a/b", true); fs2.DeleteDirectory("/b", true); // Delete on fs3 to fallback to fs2 and fs1 fs3.DeleteDirectory("/a", true); fs3.DeleteDirectory("/C", true); fs3.DeleteFile("/b.txt"); fs3.DeleteFile("/E"); var aggfs = new AggregateFileSystem(fs1); aggfs.AddFileSystem(fs2); aggfs.AddFileSystem(fs3); return(aggfs); }