当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir File.cp_r用法及代码示例


Elixir语言中 File.cp_r 相关用法介绍如下。

用法:

cp_r(source, destination, callback \\ fn _, _ -> true end)
@spec cp_r(Path.t(), Path.t(), (Path.t(), Path.t() -> boolean())) ::
  {:ok, [binary()]} | {:error, posix(), binary()}

递归地将source 中的内容复制到destination,保持源目录结构和模式。

如果source 是文件或指向它的符号链接,则destination 必须是指向现有文件的路径、指向某个文件的符号链接或指向不存在文件的路径。

如果source 是一个目录或指向它的符号链接,那么destination 必须是一个存在的directory 或指向某个目录的符号链接,或指向不存在的目录的路径。

如果源是文件,它会将 source 复制到 destination 。如果source 是一个目录,它会将源代码中的内容复制到destination 目录中。

如果目标中已存在文件,则调用 callbackcallback 必须是一个接受两个参数的函数:sourcedestination。如果应覆盖现有文件,则回调应返回true,否则返回false

此函数在复制文件时可能会失败,在这种情况下,它将使目标目录处于脏状态,其中已经复制的文件不会被删除。

该函数在成功的情况下返回{:ok, files_and_directories}files_and_directories 列出所有复制的文件和目录,没有特定的顺序。否则返回{:error, reason, file}

注意:Unix-like 系统中的命令cp 的行为会有所不同,具体取决于destination 是否为现有目录。我们已选择明确禁止这种行为。如果sourcefile 并且destination 是目录,则将返回{:error, :eisdir}

例子

# Copies file "a.txt" to "b.txt"
File.cp_r("a.txt", "b.txt")

# Copies all files in "samples" to "tmp"
File.cp_r("samples", "tmp")

# Same as before, but asks the user how to proceed in case of conflicts
File.cp_r("samples", "tmp", fn source, destination ->
  IO.gets("Overwriting #{destination} by #{source}. Type y to confirm. ") == "y\n"
end)

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 File.cp_r(source, destination, callback \\ fn _, _ -> true end)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。