// .NET: Directory class does not contain the Copy() method.
// Mimic .NET File.Copy() methods.
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="overwrite"><see langword="true"/> if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, <see langword="false"/>.</param>
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="overwrite"><see langword="true"/> if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, <see langword="false"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="overwrite"><see langword="true"/> if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, <see langword="false"/>.</param>
/// <summary>[AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed.
/// <remarks>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="overwrite"><see langword="true"/> if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, <see langword="false"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been copied. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been copied. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been copied. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Copies a directory and its contents to a new location, <see cref="CopyOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Copy action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been copied. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>Moves a file or a directory and its contents to a new location.
/// <remarks>
/// <para>This method does not work across disk volumes.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location.
/// <remarks>
/// <para>This method does not work across disk volumes.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location.
/// <remarks>
/// <para>This method does not work across disk volumes.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location.
/// <remarks>
/// <para>This method does not work across disk volumes.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified.
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified.
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been moved. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been moved. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified.
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified.
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been moved. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <summary>[AlphaFS] Moves a file or a directory and its contents to a new location, <see cref="MoveOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <returns>A <see cref="CopyMoveResult"/> class with the status of the Move action.</returns>
/// <remarks>
/// <para>This method does not work across disk volumes unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.CopyAllowed"/>.</para>
/// <para>Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method.</para>
/// <para>If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with details of the Move action.</returns>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the directory has been moved. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>
/// <summary>Copy/move a Non-/Transacted file or directory including its children to a new location,
/// <see cref="CopyOptions"/> or <see cref="MoveOptions"/> can be specified,
/// and the possibility of notifying the application of its progress through a callback function.
/// <remarks>
/// <para>Option <see cref="CopyOptions.NoBuffering"/> is recommended for very large file transfers.</para>
/// <para>You cannot use the Move method to overwrite an existing file, unless <paramref name="moveOptions"/> contains <see cref="MoveOptions.ReplaceExisting"/>.</para>
/// <para>Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException.</para>
/// </remarks>
/// </summary>
/// <returns>A <see cref="CopyMoveResult"/> class with the status of the Copy or Move action.</returns>
/// <param name="copyOptions"><see cref="CopyOptions"/> that specify how the directory is to be copied. This parameter can be <see langword="null"/>.</param>
/// <param name="moveOptions"><see cref="MoveOptions"/> that specify how the directory is to be moved. This parameter can be <see langword="null"/>.</param>
/// <param name="progressHandler">A callback function that is called each time another portion of the file has been copied/moved. This parameter can be <see langword="null"/>.</param>
/// <param name="userProgressData">The argument to be passed to the callback function. This parameter can be <see langword="null"/>.</param>
/// <param name="copyMoveResult"></param>
/// <param name="pathFormat">Indicates the format of the path parameter(s).</param>