private void CopyInternal(string source, string dest, bool overwrite, bool isLargeTransfer, EventHandler <ProgressChangedEventArgs> progressChangedHandler, EventHandler completedHandler, XCopy.ErrorHandler errorHandler) { try { XCopy.CopyFileFlags copyFileFlags = XCopy.CopyFileFlags.COPY_FILE_RESTARTABLE; if (!overwrite) { copyFileFlags |= XCopy.CopyFileFlags.COPY_FILE_FAIL_IF_EXISTS; } if (isLargeTransfer) { copyFileFlags |= XCopy.CopyFileFlags.COPY_FILE_NO_BUFFERING; } this.Source = source; this._dst = dest; if (progressChangedHandler != null) { this.ProgressChanged = (EventHandler <ProgressChangedEventArgs>)Delegate.Combine(this.ProgressChanged, progressChangedHandler); } if (completedHandler != null) { this.Completed = (EventHandler)Delegate.Combine(this.Completed, completedHandler); } if (!XCopy.CopyFileEx(this.Source, this._dst, new XCopy.CopyProgressRoutine(this.CopyProgressHandler), IntPtr.Zero, ref this._isCancelled, copyFileFlags)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } } catch (Exception ex) { if (progressChangedHandler != null) { this.ProgressChanged = (EventHandler <ProgressChangedEventArgs>)Delegate.Remove(this.ProgressChanged, progressChangedHandler); } if (completedHandler != null) { this.Completed = (EventHandler)Delegate.Remove(this.Completed, completedHandler); } if (errorHandler != null) { errorHandler(ex); } } }
internal static void Copy(string source, string dest, bool overwrite, bool isLargeTransfer = false, EventHandler <ProgressChangedEventArgs> progressChangedHandler = null, EventHandler completedHandler = null, XCopy.ErrorHandler errorHandler = null) { new XCopy().CopyInternal(source, dest, overwrite, isLargeTransfer, progressChangedHandler, completedHandler, errorHandler); }