package Geo::GDAL::FFI::VSI; use v5.10; use strict; use warnings; use Encode qw(decode encode); use Carp; use FFI::Platypus::Buffer; require Exporter; our $VERSION = 0.0900; our @ISA = qw(Exporter); our @EXPORT_OK = qw(Mkdir Rmdir ReadDir FOpen Unlink Rename); sub FOpen { return Geo::GDAL::FFI::VSI::File->Open(@_); } sub Unlink { my ($path) = @_; my $e = Geo::GDAL::FFI::VSIUnlink(encode(utf8 => $path)); confess Geo::GDAL::FFI::error_msg() // "Failed to unlink '$path'." if $e == -1; } sub Rename { my ($path, $new_path) = @_; my $e = Geo::GDAL::FFI::VSIRename(encode(utf8 => $path), encode(utf8 => $new_path)); confess Geo::GDAL::FFI::error_msg() // "Failed to rename '$path' to '$new_path'." if $e == -1; } sub Mkdir { my ($path, $mode) = @_; $mode //= hex '0x0666'; my $e = Geo::GDAL::FFI::VSIMkdir(encode(utf8 => $path), $mode); confess Geo::GDAL::FFI::error_msg() // "Failed to mkdir '$path'." if $e == -1; } sub Rmdir { my ($path) = @_; my $e = Geo::GDAL::FFI::VSIRmdir(encode(utf8 => $path)); confess Geo::GDAL::FFI::error_msg() // "Failed to rmdir '$path'." if $e == -1; } sub ReadDir { my ($path, $max_files) = @_; $max_files //= 0; my $csl = Geo::GDAL::FFI::VSIReadDirEx(encode(utf8 => $path), $max_files); my @dir; for my $i (0 .. Geo::GDAL::FFI::CSLCount($csl)-1) { push @dir, decode utf8 => Geo::GDAL::FFI::CSLGetField($csl, $i); } Geo::GDAL::FFI::CSLDestroy($csl); return @dir; } 1; =pod =encoding UTF-8 =head1 NAME Geo::GDAL::FFI::VSI - A GDAL virtual file system =head1 SYNOPSIS use Geo::GDAL::FFI::VSI qw/FOpen Mkdir ReadDir/; =head1 DESCRIPTION =head1 METHODS =head2 FOpen($path, $access) my $file = FOpen('/vsimem/file', 'w'); Short for Geo::GDAL::FFI::VSI::File::Open =head2 Mkdir($path, $mode) $mode is optional and by default 0x0666. =head2 ReadDir($path, $max_files) $max_files is optional and by default 0, i.e., read all names of files in the dir. =head1 LICENSE This software is released under the Artistic License. See L. =head1 AUTHOR Ari Jolma - Ari.Jolma at gmail.com =head1 SEE ALSO L L, L, L =cut __END__;