-
Notifications
You must be signed in to change notification settings - Fork 80
/
delete.R
66 lines (62 loc) · 1.81 KB
/
delete.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#' Delete files, directories, or links
#'
#' @description
#' `file_delete()` and `link_delete()` delete file and links. Compared to
#' [file.remove] they always fail if they cannot delete the object rather than
#' changing return value or signaling a warning.
#'
#' `dir_delete()` will first delete the contents of the directory, then remove
#' the directory. Compared to [unlink] it will always throw an error if the
#' directory cannot be deleted rather than being silent or signaling a warning.
#' @template fs
#' @export
#' @return The deleted paths (invisibly).
#' @name delete
#' @examples
#' \dontshow{fs:::pkgdown_tmp("/tmp/filedd4635bd7c86")}
#' # create a directory, with some files and a link to it
#' dir <- dir_create(file_temp())
#' files <- file_create(path(dir, letters[1:5]))
#' link <- link_create(path_norm(dir), "link")
#'
#' # All files created
#' dir_exists(dir)
#' file_exists(files)
#' link_exists(link)
#' file_exists(link_path(link))
#'
#' # Delete a file
#' file_delete(files[1])
#' file_exists(files[1])
#'
#' # Delete the directory (which deletes the files as well)
#' dir_delete(dir)
#' file_exists(files)
#' dir_exists(dir)
#'
#' # The link still exists, but what it points to does not.
#' link_exists(link)
#' dir_exists(link_path(link))
#'
#' # Delete the link
#' link_delete(link)
#' link_exists(link)
file_delete <- function(path) {
path <- path_expand(path)
unlink_(path)
invisible(path_tidy(path))
}
#' @rdname delete
#' @export
dir_delete <- function(path) {
dirs <- dir_ls(path, type = "directory", recursive = TRUE)
files <- dir_ls(path,
type = c("unknown", "file", "symlink", "FIFO", "socket", "character_device", "block_device"),
recursive = TRUE)
file_delete(files)
rmdir_(rev(c(path, dirs)))
invisible(path_tidy(path))
}
#' @rdname delete
#' @export
link_delete <- file_delete