Title: | Multi-Format Archive and Compression Support |
---|---|
Description: | Bindings to 'libarchive' <http://www.libarchive.org> the Multi-format archive and compression library. Offers R connections and direct extraction for many archive formats including 'tar', 'ZIP', '7-zip', 'RAR', 'CAB' and compression formats including 'gzip', 'bzip2', 'compress', 'lzma' and 'xz'. |
Authors: | Jim Hester [aut] , Gábor Csárdi [aut, cre], Ondrej Holy [cph] (archive_write_add_filter implementation), RStudio [cph, fnd] |
Maintainer: | Gábor Csárdi <[email protected]> |
License: | MIT + file LICENSE |
Version: | 1.1.10.9000 |
Built: | 2024-12-08 06:32:35 UTC |
Source: | https://github.com/r-lib/archive |
This function retrieves metadata about files in an archive, it can be passed
to archive_read()
or archive_write to create a connection to read or
write a specific file from the archive.
archive(file, options = character())
archive(file, options = character())
file |
File path to the archive. |
options |
|
A tibble with details about files in the archive.
archive_read()
, archive_write()
to read and write archive files
using R connections, archive_extract()
, archive_write_files()
,
archive_write_dir()
to add or extract files from an archive.
a <- archive(system.file(package = "archive", "extdata", "data.zip")) a
a <- archive(system.file(package = "archive", "extdata", "data.zip")) a
Extract contents of an archive to a directory
archive_extract( archive, dir = ".", files = NULL, options = character(), strip_components = 0L )
archive_extract( archive, dir = ".", files = NULL, options = character(), strip_components = 0L )
archive |
|
dir |
|
files |
|
options |
|
strip_components |
Remove the specified number of leading path elements. Pathnames with fewer elements will be silently skipped. |
If files
is NULL
(the default) all files will be extracted.
The filenames extracted (invisibly).
a <- system.file(package = "archive", "extdata", "data.zip") d <- tempfile() # When called with default arguments extracts all files in the archive. archive_extract(a, d) list.files(d) unlink(d) # Can also specify one or more files to extract d <- tempfile() archive_extract(a, d, c("iris.csv", "airquality.csv")) list.files(d) unlink(d)
a <- system.file(package = "archive", "extdata", "data.zip") d <- tempfile() # When called with default arguments extracts all files in the archive. archive_extract(a, d) list.files(d) unlink(d) # Can also specify one or more files to extract d <- tempfile() archive_extract(a, d, c("iris.csv", "airquality.csv")) list.files(d) unlink(d)
Create a readable connection to a file in an archive.
archive_read( archive, file = 1L, mode = "r", format = NULL, filter = NULL, options = character() )
archive_read( archive, file = 1L, mode = "r", format = NULL, filter = NULL, options = character() )
archive |
|
file |
|
mode |
|
format |
|
filter |
|
options |
|
An 'archive_read' connection to the file within the archive to be read.
a <- system.file(package = "archive", "extdata", "data.zip") # Show files in archive a # By default reads the first file in the archive. read.csv(archive_read(a), nrows = 3) # Can also specify a filename directly read.csv(archive_read(a, "mtcars.csv"), nrows = 3) # Or by position read.csv(archive_read(a, 3), nrows = 3) # Explicitly specify the format and filter if automatic detection fails. read.csv(archive_read(a, format = "zip"), nrows = 3)
a <- system.file(package = "archive", "extdata", "data.zip") # Show files in archive a # By default reads the first file in the archive. read.csv(archive_read(a), nrows = 3) # Can also specify a filename directly read.csv(archive_read(a, "mtcars.csv"), nrows = 3) # Or by position read.csv(archive_read(a, 3), nrows = 3) # Explicitly specify the format and filter if automatic detection fails. read.csv(archive_read(a, format = "zip"), nrows = 3)
Create a writable connection to a file in an archive.
archive_write( archive, file, mode = "w", format = NULL, filter = NULL, options = character() )
archive_write( archive, file, mode = "w", format = NULL, filter = NULL, options = character() )
archive |
|
file |
|
mode |
|
format |
|
filter |
|
options |
|
If format
and filter
are NULL
, they will be set automatically based on
the file extension given in file
when writing and automatically detected
using
Robust automatic format detection
when reading.
For traditional zip archives archive_write()
creates a connection which
writes the data to the specified file directly. For other archive formats
the file size must be known when the archive is created, so the data is
first written to a scratch file on disk and then added to the archive. This
scratch file is automatically removed when writing is complete.
An 'archive_write' connection to the file within the archive to be written.
# Archive format and filters can be set automatically from the file extensions. f1 <- tempfile(fileext = ".tar.gz") write.csv(mtcars, archive_write(f1, "mtcars.csv")) archive(f1) unlink(f1) # They can also be specified explicitly f2 <- tempfile() write.csv(mtcars, archive_write(f2, "mtcars.csv", format = "tar", filter = "bzip2")) archive(f2) unlink(f2) # You can also pass additional options to control things like compression level f3 <- tempfile(fileext = ".tar.gz") write.csv(mtcars, archive_write(f3, "mtcars.csv", options = "compression-level=2")) archive(f3) unlink(f3)
# Archive format and filters can be set automatically from the file extensions. f1 <- tempfile(fileext = ".tar.gz") write.csv(mtcars, archive_write(f1, "mtcars.csv")) archive(f1) unlink(f1) # They can also be specified explicitly f2 <- tempfile() write.csv(mtcars, archive_write(f2, "mtcars.csv", format = "tar", filter = "bzip2")) archive(f2) unlink(f2) # You can also pass additional options to control things like compression level f3 <- tempfile(fileext = ".tar.gz") write.csv(mtcars, archive_write(f3, "mtcars.csv", options = "compression-level=2")) archive(f3) unlink(f3)
archive_write_files()
adds one or more files to a new archive.
archive_write_dir()
adds all the file(s) in a directory to a new archive.
archive_write_dir( archive, dir, format = NULL, filter = NULL, options = character(), ..., recursive = TRUE, full.names = FALSE ) archive_write_files( archive, files, format = NULL, filter = NULL, options = character() )
archive_write_dir( archive, dir, format = NULL, filter = NULL, options = character(), ..., recursive = TRUE, full.names = FALSE ) archive_write_files( archive, files, format = NULL, filter = NULL, options = character() )
archive |
|
dir |
|
format |
|
filter |
|
options |
|
... |
additional parameters passed to |
recursive |
logical. Should the listing recurse into directories? |
full.names |
a logical value. If |
files |
|
An 'archive' object representing the new archive (invisibly).
An 'archive' object representing the new archive (invisibly).
if (archive:::libarchive_version() > "3.2.0") { # write some files to a directory d <- tempfile() dir.create(d) old <- setwd(d) write.csv(iris, file.path(d, "iris.csv")) write.csv(mtcars, file.path(d, "mtcars.csv")) write.csv(airquality, file.path(d, "airquality.csv")) # Add some to a new archive a <- archive_write_files("data.tar.gz", c("iris.csv", "mtcars.csv")) setwd(old) a # Add all files in a directory a <- archive_write_dir("data.zip", d) a unlink("data.zip") }
if (archive:::libarchive_version() > "3.2.0") { # write some files to a directory d <- tempfile() dir.create(d) old <- setwd(d) write.csv(iris, file.path(d, "iris.csv")) write.csv(mtcars, file.path(d, "mtcars.csv")) write.csv(airquality, file.path(d, "airquality.csv")) # Add some to a new archive a <- archive_write_files("data.tar.gz", c("iris.csv", "mtcars.csv")) setwd(old) a # Add all files in a directory a <- archive_write_dir("data.zip", d) a unlink("data.zip") }
They are functionally equivalent to calling archive_read or
archive_write using format = "raw", archive = file
.
file_read(file, mode = "r", filter = NULL, options = character()) file_write(file, mode = "w", filter = NULL, options = character())
file_read(file, mode = "r", filter = NULL, options = character()) file_write(file, mode = "w", filter = NULL, options = character())
file |
|
mode |
|
filter |
|
options |
|
file_write()
returns an writable output connection,
file_read()
returns a readable input connection.
An 'archive_read' connection (for file_read()
) or an 'archive_write' connection (for file_write()
) to the file.
if (archive:::libarchive_version() > "3.2.0") { # Write bzip2, base 64 encoded data and use high compression write.csv(mtcars, file_write("mtcars.bz2", filter = c("uuencode", "bzip2"), options = "compression-level=9" ) ) # Read it back read.csv(file_read("mtcars.bz2"), row.names = 1, nrows = 3) unlink("mtcars.bz2") }
if (archive:::libarchive_version() > "3.2.0") { # Write bzip2, base 64 encoded data and use high compression write.csv(mtcars, file_write("mtcars.bz2", filter = c("uuencode", "bzip2"), options = "compression-level=9" ) ) # Read it back read.csv(file_read("mtcars.bz2"), row.names = 1, nrows = 3) unlink("mtcars.bz2") }