private void CaseSensitiveRename(string sourcePath, string destPath, RenameDelegate renamer) { if (sourcePath.Equals(destPath, StringComparison.OrdinalIgnoreCase)) { // workaround for case-only renames on case-insensitive file systems: var sourceDir = Path.GetDirectoryName(sourcePath); var sourceFile = Path.GetFileName(sourcePath); var destDir = Path.GetDirectoryName(destPath); var destFile = Path.GetFileName(destPath); if (sourceDir != destDir) { // recursively rename containing directories that differ in case CaseSensitiveRename(sourceDir, destDir, renamer); // fix up source path based on renamed directory sourcePath = Path.Combine(destDir, sourceFile); } if (sourceFile != destFile) { // use temporary filename to rename files that differ in case var tempPath = sourcePath + ".mvtmp"; CaseSensitiveRename(sourcePath, tempPath, renamer); CaseSensitiveRename(tempPath, destPath, renamer); } } else { renamer(sourcePath, destPath); } }
public DelegateMemberRenamer(RenameDelegate rename) { if (rename == null) { throw new ArgumentNullException(nameof(rename)); } Rename = rename; }
public DelegateMemberRenamer(RenameDelegate rename) { if (rename == null) throw new ArgumentNullException(nameof(rename)); Rename = rename; }
private void CaseSensitiveRename(string sourcePath, string destPath, RenameDelegate renamer) { renamer(sourcePath, destPath, sourcePath.Equals(destPath, StringComparison.OrdinalIgnoreCase)); }