static private MakeHRFromErrorCode ( int errorCode ) : int | ||
errorCode | int | |
return | int |
public override void MoveDirectory(string sourceFullPath, string destFullPath) { if (!Interop.Kernel32.MoveFile(sourceFullPath, destFullPath)) { int errorCode = Marshal.GetLastWin32Error(); if (errorCode == Interop.Errors.ERROR_FILE_NOT_FOUND) { throw Win32Marshal.GetExceptionForWin32Error(Interop.Errors.ERROR_PATH_NOT_FOUND, sourceFullPath); } // This check was originally put in for Win9x (unfortunately without special casing it to be for Win9x only). We can't change the NT codepath now for backcomp reasons. if (errorCode == Interop.Errors.ERROR_ACCESS_DENIED) // WinNT throws IOException. This check is for Win9x. We can't change it for backcomp. { throw new IOException(SR.Format(SR.UnauthorizedAccess_IODenied_Path, sourceFullPath), Win32Marshal.MakeHRFromErrorCode(errorCode)); } throw Win32Marshal.GetExceptionForWin32Error(errorCode); } }
private static void MoveDirectory(string sourceFullPath, string destFullPath, bool isCaseSensitiveRename) { // Source and destination must have the same root. ReadOnlySpan <char> sourceRoot = Path.GetPathRoot(sourceFullPath); ReadOnlySpan <char> destinationRoot = Path.GetPathRoot(destFullPath); if (!sourceRoot.Equals(destinationRoot, StringComparison.OrdinalIgnoreCase)) { throw new IOException(SR.IO_SourceDestMustHaveSameRoot); } if (!Interop.Kernel32.MoveFile(sourceFullPath, destFullPath, overwrite: false)) { int errorCode = Marshal.GetLastWin32Error(); if (errorCode == Interop.Errors.ERROR_FILE_NOT_FOUND) { throw Win32Marshal.GetExceptionForWin32Error(Interop.Errors.ERROR_PATH_NOT_FOUND, sourceFullPath); } if (errorCode == Interop.Errors.ERROR_ALREADY_EXISTS) { throw Win32Marshal.GetExceptionForWin32Error(Interop.Errors.ERROR_ALREADY_EXISTS, destFullPath); } // This check was originally put in for Win9x (unfortunately without special casing it to be for Win9x only). We can't change the NT codepath now for backcomp reasons. if (errorCode == Interop.Errors.ERROR_ACCESS_DENIED) // WinNT throws IOException. This check is for Win9x. We can't change it for backcomp. { throw new IOException(SR.Format(SR.UnauthorizedAccess_IODenied_Path, sourceFullPath), Win32Marshal.MakeHRFromErrorCode(errorCode)); } throw Win32Marshal.GetExceptionForWin32Error(errorCode); } }