The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Win32::Unicode::Dir - Unicode string directory utility.

SYNOPSIS

  use Win32::Unicode::Dir;
  use Win32::Unicode::Console;
  
  my $dir = "I \x{2665} Perl";
  
  my $wdir = Win32::Unicode::Dir->new;
  $wdir->open($dir) || die $wdir->error;
  for ($wdir->fetch) {
      next if /^\.{1,2}$/;
      
      my $full_path = "$dir/$_";
      if (file_type('f', $full_path)) {
          # $_ is file
      }
      elsif (file_type('d', $full_path))
          # $_ is directory
      }
  }
  $wdir->close || dieW $wdir->error;
  
  my $cwd = getcwdW();
  chdirW($change_dir_name);
  
  mkdirW $dir;
  rmdirW $dir;

DESCRIPTION

Win32::Unicode::Dir is Unicode string directory utility.

METHODS

new

Create a Win32::Unicode::Dir instance.

  my $wdir = Win32::Unicode::Dir->new;
open($dir)

Like CORE::opendir.

  $wdir->open($dir) or die $!
fetch()

Like CORE::readdir.

  while (my $file = $wdir->fetch) {
     # snip
  }

or

  for my $file ($wdir->fetch) {
     # snip
  }
read()

Alias of fetch().

readdir()

Alias of fetch().

close()

Like CORE::closedir.

  $wdir->close or dieW $wdir->error
error()

get error message.

FUNCTIONS

getcwdW

Like Cwd::getcwd. get current directory.

  my $cwd = getcwdW;
chdirW($dir)

Like CORE::chdir.

  chdirW $dir or die $!;
mkdirW($new_dir)

Like CORE::mkdir.

  mkdirW $new_dir or die $!;
rmdirW($del_dir)

Like CORE::rmdir.

  rmdirW($del_dir) or die $!;
rmtreeW($del_dir)

Like File::Path::rmtree.

  rmtreeW $del_dir or die $!;
mkpathW($make_long_dir_name)

Like File::Path::mkpath.

  mkpathW $make_long_dir_name or die $!
cptreeW($from, $to [, $over])

copy directory tree.

  cptreeW $from, $to or die $!;

If $from delimiter of directory is a terminator, move the contents of $from to $to.

  cptreeW 'foo/', 'hoge';
  
  # before current directory tree
  # ----------------------------
  # foo
  # foo/bar
  # foo/bar/baz
  # hoge
  # ----------------------------
  
  # before current directory tree
  # ----------------------------
  # foo
  # foo/bar
  # foo/bar/baz
  # hoge/
  # hoge/bar
  # hoge/bar/baz
  # ----------------------------

If just a directory name, is as follows

  cptreeW 'foo', 'hoge';
  
  # before current directory tree
  # ----------------------------
  # foo
  # foo/bar
  # foo/bar/baz
  # hoge
  # ----------------------------
  
  # before current directory tree
  # ----------------------------
  # foo
  # foo/bar
  # foo/bar/baz
  # hoge/foo
  # hoge/foo/bar
  # hoge/foo/bar/baz
  # ----------------------------
mvtreeW($from, $to [, $over]))

move directory tree.

  mvtreeW $from, $to or die $!;

If $from delimiter of directory is a terminator, move the contents of $from to $to.

  mvtreeW 'foo/', 'hoge';
  
  # before current directory tree
  # ----------------------------
  # foo
  # foo/bar
  # foo/bar/baz
  # hoge
  # ----------------------------
  
  # after current directory tree
  # ----------------------------
  # foo
  # hoge
  # hoge/bar
  # hoge/bar/baz
  # ----------------------------

If just a directory name, is as follows

  mvtreeW 'foo', 'hoge';
  
  # before current directory tree
  # ----------------------------
  # foo
  # foo/bar
  # foo/bar/baz
  # hoge
  # ----------------------------
  
  # after current directory tree
  # ----------------------------
  # hoge
  # hoge/foo
  # hoge/foo/bar
  # hoge/foo/bar/baz
  # ----------------------------
findW($code, $dir)

like File::Find::find.

  findW \&wanted, $dir;
  sub wanted {
      my $file = $_;
      my $name = $Win32::Unicode::Dir::name;
      my $dir  = $Win32::Unicode::Dir::dir;
      my $cwd  = $Win32::Unicode::Dir::cwd; # $dir eq $cwd
  }

or

  findW \&wanted, @dirs;
  sub wanted{
      my $arg = shift;
      print $args->{file}; # eq $_
      print $args->{name}; # eq $Win32::Unicode::Dir::name
      print $args->{cwd};  # eq $Win32::Unicode::Dir::cwd
      print $args->{dir};  # eq $Win32::Unicode::Dir::dir
      print $args->{path}; # full path
  }

or

  findW \%options, @dirs;

\%options

wanted

The value should be a code reference. Like File::Find#wanted

preprocess

The value should be a code reference. Like File::Find#preprocess

postprocess

The value should be a code reference. Like File::Find#postprocess

no_chdir

Boolean. If you set a true value will not change directories. In this case, $_ will be the same as $Win32::Unicode::Dir::name. Like File::Find#no_chdir

finddepthW($code, $dir)

like File::Find::finddepth.

  finddepthW \&wanted, $driname;

equals to

  findW { wanted => \&wanted, bydepth => 1 }, $dirname;
dir_size($dir)

get directory size. this function are slow.

  my $dir_size = dir_size($dir) or die $!
file_list($dir)

get files from $dir

  my @files = file_list $dir;
dir_list($dir)

get directories from $dir

  my @dirs = dir_list $dir;

AUTHOR

Yuji Shimada <xaicron@cpan.org>

SEE ALSO

Win32

Win32API::File

Win32::Unicode

Win32::Unicode::File

Win32::Unicode::Error

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.