void Command_Files_Names_GetUnique(GetUniqueNamesDialog.Result result) { var used = new HashSet<string>(StringComparer.OrdinalIgnoreCase); if (!result.Format.Contains("{Unique}")) throw new Exception("Format must contain \"{Unique}\" tag"); var newNames = new List<string>(); var format = result.Format.Replace("{Path}", "{0}").Replace("{Name}", "{1}").Replace("{Unique}", "{2}").Replace("{Ext}", "{3}"); foreach (var fileName in GetSelectionStrings()) { var path = Path.GetDirectoryName(fileName); if (!string.IsNullOrEmpty(path)) path += @"\"; var name = Path.GetFileNameWithoutExtension(fileName); var ext = Path.GetExtension(fileName); var newFileName = fileName; for (var num = result.RenameAll ? 1 : 2; ; ++num) { if ((result.CheckExisting) && (FileOrDirectoryExists(newFileName))) used.Add(newFileName); if (((num != 1) || (!result.RenameAll)) && (!used.Contains(newFileName))) break; var unique = result.UseGUIDs ? Guid.NewGuid().ToString() : num.ToString(); newFileName = string.Format(format, path, name, unique, ext); } newNames.Add(newFileName); used.Add(newFileName); } ReplaceSelections(newNames); }
public static Result Run(Window parent) { var dialog = new GetUniqueNamesDialog { Owner = parent }; return dialog.ShowDialog() ? dialog.result : null; }