public static void Move(string sourceDirName, string destDirName) { if (sourceDirName == null) { throw new ArgumentNullException(nameof(sourceDirName)); } if (sourceDirName.Length == 0) { throw new ArgumentException(SR.Argument_EmptyFileName, nameof(sourceDirName)); } if (destDirName == null) { throw new ArgumentNullException(nameof(destDirName)); } if (destDirName.Length == 0) { throw new ArgumentException(SR.Argument_EmptyFileName, nameof(destDirName)); } string fullsourceDirName = Path.GetFullPath(sourceDirName); string sourcePath = PathInternal.EnsureTrailingSeparator(fullsourceDirName); string fulldestDirName = Path.GetFullPath(destDirName); string destPath = PathInternal.EnsureTrailingSeparator(fulldestDirName); StringComparison pathComparison = PathInternal.StringComparison; if (string.Equals(sourcePath, destPath, pathComparison)) { throw new IOException(SR.IO_SourceDestMustBeDifferent); } string sourceRoot = Path.GetPathRoot(sourcePath); string destinationRoot = Path.GetPathRoot(destPath); if (!string.Equals(sourceRoot, destinationRoot, pathComparison)) { throw new IOException(SR.IO_SourceDestMustHaveSameRoot); } // Windows will throw if the source file/directory doesn't exist, we preemptively check // to make sure our cross platform behavior matches NetFX behavior. if (!FileSystem.DirectoryExists(fullsourceDirName) && !FileSystem.FileExists(fullsourceDirName)) { throw new DirectoryNotFoundException(SR.Format(SR.IO_PathNotFound_Path, fullsourceDirName)); } if (FileSystem.DirectoryExists(fulldestDirName)) { throw new IOException(SR.Format(SR.IO_AlreadyExists_Name, fulldestDirName)); } FileSystem.MoveDirectory(fullsourceDirName, fulldestDirName); }
public void MoveTo(string destDirName) { if (destDirName == null) { throw new ArgumentNullException(nameof(destDirName)); } if (destDirName.Length == 0) { throw new ArgumentException(SR.Argument_EmptyFileName, nameof(destDirName)); } string destination = Path.GetFullPath(destDirName); string destinationWithSeparator = PathInternal.EnsureTrailingSeparator(destination); string sourceWithSeparator = PathInternal.EnsureTrailingSeparator(FullPath); if (string.Equals(sourceWithSeparator, destinationWithSeparator, PathInternal.StringComparison)) { throw new IOException(SR.IO_SourceDestMustBeDifferent); } string sourceRoot = Path.GetPathRoot(sourceWithSeparator); string destinationRoot = Path.GetPathRoot(destinationWithSeparator); if (!string.Equals(sourceRoot, destinationRoot, PathInternal.StringComparison)) { throw new IOException(SR.IO_SourceDestMustHaveSameRoot); } // Windows will throw if the source file/directory doesn't exist, we preemptively check // to make sure our cross platform behavior matches NetFX behavior. if (!Exists && !FileSystem.FileExists(FullPath)) { throw new DirectoryNotFoundException(SR.Format(SR.IO_PathNotFound_Path, FullPath)); } if (FileSystem.DirectoryExists(destination)) { throw new IOException(SR.Format(SR.IO_AlreadyExists_Name, destinationWithSeparator)); } FileSystem.MoveDirectory(FullPath, destination); Init(originalPath: destDirName, fullPath: destinationWithSeparator, fileName: _name, isNormalized: true); // Flush any cached information about the directory. Invalidate(); }