/// <summary> /// Rename all files in this directory and subdirectories /// </summary> /// <param name="newNames">The replacement Regex pattern to rename to</param> /// <param name="previewOnly">If true, do not rename, only preview</param> public void Rename(string skipPrefix, string newNames, bool previewOnly) { // Set up a prefix for printing string prefix = baseDir; if (prefix.ToLower().StartsWith(skipPrefix.ToLower())) { prefix = prefix.Substring(skipPrefix.Length); } // Handle each file foreach (string file in this.files) { // Match the file name against the original filter FileNameRegex r = this.regex; // new FileNameRegex(filter); string newFileName = r.ReplaceFileName(file, newNames); Console.WriteLine(prefix + file + " --> " + newFileName); if (!previewOnly) { // Rename baseDir + file to baseDir + newFileName File.Move(baseDir + file, baseDir + newFileName); } } // Handle subdirectories foreach (RegExDirInfo dir in this.directories) { dir.Rename(skipPrefix, newNames, previewOnly); } }
/// <summary> /// Perform a rename in a directory using the specified patterns and options /// </summary> /// <param name="origNames"></param> /// <param name="newNames"></param> /// <param name="optionSubDirs"></param> /// <param name="optionListOnly"></param> /// <param name="optionVerbose"></param> /// <returns></returns> static private int Rename(string origNames, string newNames, bool optionSubDirs, bool optionListOnly, bool optionVerbose) { if (optionVerbose) { if (optionListOnly) { Console.WriteLine("Preview of renaming " + origNames + " to " + newNames + ":"); } else { Console.WriteLine("Renaming " + origNames + " to " + newNames + ":"); } } string currentDir = CurrentDir(); // Create a FileNameRegex for the whole file name FileNameRegex r = new FileNameRegex("^" + origNames + "$"); RegExDirInfo dirInfo = new RegExDirInfo(currentDir, optionSubDirs, r); dirInfo.Rename(currentDir, newNames, optionListOnly); return(0); }
private void Preview() { FileNameRegex fnr = new FileNameRegex(this.matchTextBox.Text); string replacePattern = this.replaceTextBox.Text; // Set up the file list this.fileList.Items.Clear(); // Loop over all file names in the root folder foreach (FileItem file in this.rootFolder.Files) { string oldName = file.Name; string newName = fnr.ReplaceFileName(oldName, replacePattern); if (newName != null) { ListViewItem item = this.fileList.Items.Add(oldName, file.SmallIconIndex); item.SubItems.Add(newName); if (newName != oldName) { item.Checked = true; item.ToolTipText = newName + " --> " + oldName; } else { item.Checked = false; item.ToolTipText = oldName; } } } }
/// <summary> /// Perform a listing of a directory using the specified filter and options /// </summary> /// <param name="filter"></param> /// <param name="optionSubDirs"></param> /// <param name="optionVerbose"></param> /// <returns></returns> static private int DirList(string filter, bool optionSubDirs, bool optionVerbose) { // Create a FileNameRegex for the whole file name FileNameRegex r = new FileNameRegex("^" + filter + "$"); if (optionVerbose) { Console.WriteLine("Listing of " + filter + ":"); } string currentDir = CurrentDir(); RegExDirInfo dirInfo = new RegExDirInfo(currentDir, optionSubDirs, r); dirInfo.List(currentDir, optionVerbose); return(0); }
/// <summary> /// Constructor. Create a new object and fill files and directories /// </summary> /// <param name="baseDir">The base dir, ending in backslash</param> /// <param name="subDirs">If true, also search subdirectories of base directory</param> /// <param name="r">The file name regex to use</param> public RegExDirInfo(string baseDir, bool subDirs, FileNameRegex r) { this.baseDir = baseDir; // this.filter = filter; this.regex = r; // Get files in directory, then match DirectoryInfo dirInfo = new DirectoryInfo(baseDir); FileInfo[] files = dirInfo.GetFiles(); this.files = new ArrayList(); for (int i = 0; i < files.Length; i++) { if (r.IsMatch(files[i].Name)) { this.files.Add(files[i].Name); } } // Set up a list of subdirectories this.directories = new ArrayList(); // Get subdirectories and match those, if necessary if (subDirs) { DirectoryInfo[] directories = dirInfo.GetDirectories(); foreach (DirectoryInfo directory in directories) { RegExDirInfo subDir = new RegExDirInfo(directory.FullName + "\\", subDirs, r); if (subDir.files.Count != 0) { this.directories.Add(subDir); } } } }