public static async Task Dir(string[] path, IFdbTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct) { if (log == null) log = Console.Out; log.WriteLine("# Listing {0}:", String.Join("/", path)); var parent = await TryOpenCurrentDirectoryAsync(path, db, ct); if (parent == null) { log.WriteLine(" Directory not found."); return; } if (parent.Layer.IsPresent) { log.WriteLine("# Layer: {0}", parent.Layer.ToAsciiOrHexaString()); } var folders = await Fdb.Directory.BrowseAsync(db, parent, ct); if (folders != null && folders.Count > 0) { foreach (var kvp in folders) { var name = kvp.Key; var subfolder = kvp.Value; if (subfolder != null) { if ((options & DirectoryBrowseOptions.ShowCount) != 0) { if (!(subfolder is FdbDirectoryPartition)) { long count = await Fdb.System.EstimateCountAsync(db, subfolder.ToRange(), ct); log.WriteLine(" {0,-12} {1,-12} {3,9:N0} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, count); } else { log.WriteLine(" {0,-12} {1,-12} {3,9} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, "-"); } } else { log.WriteLine(" {0,-12} {1,-12} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name); } } else { log.WriteLine(" WARNING: {0} seems to be missing!", name); } } log.WriteLine(" {0} sub-directorie(s).", folders.Count); } else { //TODO: test if it contains data? log.WriteLine(" No sub-directories."); } }
public static async Task Dir(string[] path, IVarTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct) { if (log == null) { log = Console.Out; } Program.Comment(log, $"# Listing /{string.Join("/", path)}:"); var parent = await TryOpenCurrentDirectoryAsync(path, db, ct); if (parent == null) { Program.Error(log, "Directory not found."); return; } if (parent.Layer.IsPresent) { log.WriteLine($"# Layer: {parent.Layer:P}"); } var folders = await Fdb.Directory.BrowseAsync(db, parent, ct); if (folders != null && folders.Count > 0) { foreach (var kvp in folders) { var name = kvp.Key; var subfolder = kvp.Value; if (subfolder != null) { if ((options & DirectoryBrowseOptions.ShowCount) != 0) { if (!(subfolder is FdbDirectoryPartition)) { long count = await Fdb.System.EstimateCountAsync(db, subfolder.Keys.ToRange(), ct); Program.StdOut(log, $" {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">")),-12} {count,9:N0} {name}", ConsoleColor.White); } else { Program.StdOut(log, $" {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">")),-12} {"-",9} {name}", ConsoleColor.White); } } else { Program.StdOut(log, $" {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">")),-12} {name}", ConsoleColor.White); } } else { Program.Error(log, $" WARNING: {name} seems to be missing!"); } } log.WriteLine($" {folders.Count} sub-directorie(s)."); } else { //TODO: test if it contains data? log.WriteLine("No sub-directories."); } //TODO: check if there is at least one key? }
public static async Task Dir(string[] path, IFdbTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct) { if (log == null) { log = Console.Out; } log.WriteLine("# Listing {0}:", String.Join("/", path)); var parent = await TryOpenCurrentDirectoryAsync(path, db, ct); if (parent == null) { log.WriteLine(" Directory not found."); return; } if (parent.Layer.IsPresent) { log.WriteLine("# Layer: {0}", parent.Layer.ToAsciiOrHexaString()); } var folders = await Fdb.Directory.BrowseAsync(db, parent, ct); if (folders != null && folders.Count > 0) { foreach (var kvp in folders) { var name = kvp.Key; var subfolder = kvp.Value; if (subfolder != null) { if ((options & DirectoryBrowseOptions.ShowCount) != 0) { if (!(subfolder is FdbDirectoryPartition)) { long count = await Fdb.System.EstimateCountAsync(db, subfolder.ToRange(), ct); log.WriteLine(" {0,-12} {1,-12} {3,9:N0} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, count); } else { log.WriteLine(" {0,-12} {1,-12} {3,9} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, "-"); } } else { log.WriteLine(" {0,-12} {1,-12} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name); } } else { log.WriteLine(" WARNING: {0} seems to be missing!", name); } } log.WriteLine(" {0} sub-directorie(s).", folders.Count); } else { //TODO: test if it contains data? log.WriteLine(" No sub-directories."); } }
public static async Task Dir(FdbPath path, IVarTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct) { if (log == null) { log = Console.Out; } Program.Comment(log, $"# Listing {path}:"); await db.ReadAsync(async tr => { var parent = await TryOpenCurrentDirectoryAsync(tr, path); if (parent == null) { Program.Error(log, "Directory not found."); return; } if (!string.IsNullOrEmpty(parent.Layer)) { log.WriteLine($"# Layer: {parent.Layer}"); } var folders = await Fdb.Directory.BrowseAsync(tr, parent); if (folders.Count > 0) { // to better align the names, we allow between 16 to 40 chars for the first column. // if there is a larger name, it will stick out! var maxLen = Math.Min(Math.Max(folders.Keys.Max(n => n.Length), 16), 40); foreach (var kvp in folders) { var name = kvp.Key; var subfolder = kvp.Value; if (subfolder != null) { if ((options & DirectoryBrowseOptions.ShowCount) != 0) { if (!(subfolder is FdbDirectoryPartition)) { long count = await Fdb.System.EstimateCountAsync(db, subfolder.ToRange(), ct); Program.StdOut(log, $" {name.PadRight(maxLen)} {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(string.IsNullOrEmpty(subfolder.Layer) ? "-" : ("[" + subfolder.Layer + "]")),-12} {count,9:N0}", ConsoleColor.White); } else { Program.StdOut(log, $" {name.PadRight(maxLen)} {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(string.IsNullOrEmpty(subfolder.Layer) ? "-" : ("[" + subfolder.Layer + "]")),-12} {"-",9}", ConsoleColor.White); } } else { Program.StdOut(log, $" {name.PadRight(maxLen)} {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(string.IsNullOrEmpty(subfolder.Layer) ? "-" : ("[" + subfolder.Layer + "]")),-12}", ConsoleColor.White); } } else { Program.Error(log, $" WARNING: {name} seems to be missing!"); } } log.WriteLine($" {folders.Count} sub-directories."); } else { //TODO: test if it contains data? log.WriteLine("No sub-directories."); } //TODO: check if there is at least one key? }, ct); }