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

the Win32 manpage

the Win32API::File manpage

the Win32::Unicode manpage

the Win32::Unicode::File manpage

the Win32::Unicode::Error manpage


LICENSE

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

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