Clarify copyRecursively behavior in case of a single file.

This commit is contained in:
Ilya Gorbunov
2017-04-12 23:50:23 +03:00
parent 7ebd86725f
commit 59dc0f57fc
+17 -6
View File
@@ -165,6 +165,8 @@ private fun File.toRelativeStringOrNull(base: File): String? {
* If this file is a directory, it is copied without its content, i.e. an empty [target] directory is created. * If this file is a directory, it is copied without its content, i.e. an empty [target] directory is created.
* If you want to copy directory including its contents, use [copyRecursively]. * If you want to copy directory including its contents, use [copyRecursively].
* *
* The operation doesn't preserve copied file attributes such as creation/modification date, permissions, etc.
*
* @param overwrite `true` if destination overwrite is allowed. * @param overwrite `true` if destination overwrite is allowed.
* @param bufferSize the buffer size to use when copying. * @param bufferSize the buffer size to use when copying.
* @return the [target] file. * @return the [target] file.
@@ -222,20 +224,29 @@ private class TerminateException(file: File) : FileSystemException(file) {}
* Copies this file with all its children to the specified destination [target] path. * Copies this file with all its children to the specified destination [target] path.
* If some directories on the way to the destination are missing, then they will be created. * If some directories on the way to the destination are missing, then they will be created.
* *
* If this file path points to a single file, then it will be copied to a file with the path [target].
* If this file path points to a directory, then its children will be copied to a directory with the path [target].
*
* If the [target] already exists, it will be deleted before copying when the [overwrite] parameter permits so.
*
* The operation doesn't preserve copied file attributes such as creation/modification date, permissions, etc.
*
* If any errors occur during the copying, then further actions will depend on the result of the call * If any errors occur during the copying, then further actions will depend on the result of the call
* to `onError(File, IOException)` function, that will be called with arguments, * to `onError(File, IOException)` function, that will be called with arguments,
* specifying the file that caused the error and the exception itself. * specifying the file that caused the error and the exception itself.
* By default this function rethrows exceptions. * By default this function rethrows exceptions.
*
* Exceptions that can be passed to the `onError` function: * Exceptions that can be passed to the `onError` function:
* NoSuchFileException - if there was an attempt to copy a non-existent file *
* FileAlreadyExistsException - if there is a conflict * - [NoSuchFileException] - if there was an attempt to copy a non-existent file
* AccessDeniedException - if there was an attempt to open a directory that didn't succeed. * - [FileAlreadyExistsException] - if there is a conflict
* IOException - if some problems occur when copying. * - [AccessDeniedException] - if there was an attempt to open a directory that didn't succeed.
* - [IOException] - if some problems occur when copying.
*
* Note that if this function fails, then partial copying may have taken place.
* *
* @param overwrite `true` if it is allowed to overwrite existing destination files and directories. * @param overwrite `true` if it is allowed to overwrite existing destination files and directories.
* @return `false` if the copying was terminated, `true` otherwise. * @return `false` if the copying was terminated, `true` otherwise.
*
* Note that if this function fails, then partial copying may have taken place.
*/ */
public fun File.copyRecursively(target: File, public fun File.copyRecursively(target: File,
overwrite: Boolean = false, overwrite: Boolean = false,