public CompositeFileSystem(IList <Tuple <string, IFileSystem> > fss) { var ixs = fss.OrderBy(fs => fs.Item1, StringComparer.OrdinalIgnoreCase) .Select((fs, ix) => ix); _fslist = fss.OrderByDescending(fs => fs.Item1, StringComparer.OrdinalIgnoreCase).Select(fs => Tuple.Create(Util.CombinePath(fs.Item1, ""), fs.Item2) ); foreach (var ix in ixs) { var fs = fss[ix]; var k = fs.Item1; var n = Util.CombinePath(k, ""); ProcessPath(fs.Item2, "/", n); } foreach (var p in _fs.Keys.ToArray()) { foreach (var s in NewSegments(p)) { if (s.Equals("/")) { continue; } var name = s.Substring(s.TrimEnd('/').LastIndexOf('/')).Trim('/'); _fs[s] = new CompositePlaceHolderDir() { Name = name }; } } var dirs = from nv in _fs let k = nv.Key.TrimEnd('/') let gk = k.Length > 0 ? k.Substring(0, k.LastIndexOf('/')) : "" group nv by gk.ToLowerInvariant(); foreach (var g in dirs) { var k = g.Key.Length > 0 ? Util.CombinePath(g.Key, "") : "/"; _dir[k] = g.Select(v => v.Value).ToList(); } return; }
public CompositeFileSystem(IList<Tuple<string, IFileSystem>> fss) { var ixs = fss.OrderBy(fs => fs.Item1, StringComparer.OrdinalIgnoreCase) .Select((fs, ix) => ix); _fslist = fss.OrderByDescending(fs => fs.Item1, StringComparer.OrdinalIgnoreCase).Select(fs => Tuple.Create(Util.CombinePath(fs.Item1,""),fs.Item2) ); foreach (var ix in ixs) { var fs = fss[ix]; var k = fs.Item1; var n = Util.CombinePath(k, ""); ProcessPath(fs.Item2, "/", n); } foreach (var p in _fs.Keys.ToArray()) { foreach (var s in NewSegments(p)) { if (s.Equals("/")) continue; var name = s.Substring(s.TrimEnd('/').LastIndexOf('/')).Trim('/'); _fs[s] = new CompositePlaceHolderDir() { Name = name }; } } var dirs = from nv in _fs let k = nv.Key.TrimEnd('/') let gk = k.Length > 0 ? k.Substring(0, k.LastIndexOf('/')) : "" group nv by gk.ToLowerInvariant(); foreach (var g in dirs) { var k = g.Key.Length > 0 ? Util.CombinePath(g.Key, "") : "/"; _dir[k] = g.Select(v => v.Value).ToList(); } return; }