Real Perl has asked for the wisdom of the Perl Monks concerning the following question:

Dearest Monks,
I am using the module called Win32::DirSize to calculate directory sizes and available space on directories and it works fine (even if I give it a directory that does not exist) until I give it a duplicate directory. Anyone has an idea how I could overcome this hurtle?
Thanks,
Claire

Replies are listed 'Best First'.
Re: Duplicates in Win32::DirSize
by ww (Archbishop) on Aug 19, 2005 at 18:51 UTC
    Code?
      ok, this is the way I use it:
      foreach (@arraydirectory){ my $cleansource = $source; $cleansource .= "\\"; $cleansource +.= $_; $sourceResult = dir_size($cleansource, $sourceDirInfo,); $sbyte += $sourceDirInfo->{DirSize}; $sourceSize = best_convert($sourceSizeUnit, $sourceDirInfo->{H +ighSize}, $sourceDirInfo->{LowSize},); my $s = $sourceSize; $s .= $sourceSizeUnit; $table->add($_); $table->itemCreate($_, 0, -text => $_); $table->itemCreate($_, 1, -text => $s); }#foreach
      Hope this helps,
      Claire

        For clarification, what kind of "hurtle" are you seeing? Is it messing up when it tries to itemCreate() because of the duplicate name? Is it reporting a wrong size? Are we talking duplicate full paths or just duplicate bottom-level folder names (c:/foo/bar/baz and c:/windows/baz, for instance)?

        While I'm here, you could make the code a little more concise:

        # Line 2 my $cleansource = "$course\\$_"; # or: my $cleansource = $course . "\\" . $_; # Lines 6/7 my $s = "$sourceSize$sourceSizeUnit"; # or: my $s = $sourceSize . $sourceSizeUnit

        Using x= (with x being some operator) is only more efficient when working with one additional value. Which looks better to you:

        $x = $a; $x += $b; $x += $c; $x += $d; $x = $a + $b + $c + $d;

        The latter involves less typing, looks much clearer, and is likely more efficient. Sorry to be nitpicky. I'm often anal about grammar and all things related (both in code and in language)

        [id://wink] waits for someone to find a grammar mistake in this reply (no, I didn't place one intentionally for anyone to find, but I likely made one). ;)