in reply to Deleting files in the first folder

Most likely your problem is that you try to reread using DIR without reopening it. However there are a number of things that will help to tidy your code up. Consider (untested):

#!/usr/local/bin/perl use strict; use warnings; use Archive::Zip qw( :ERROR_CODES ); my @testFiles = listFiles ('C:\Perl\test'); # while loop to try every min for 3 mins if any the file counts a & b +don't match my $retries = 0; while ($retries++ < 3) { my @compressFiles = listFiles ('C:\Perl\compress'); if (@testFiles == @compressFiles) { compress (\@compressFiles); unlink @compressFiles; #delete compressed files unlink @testFiles; #delete test files last; } print "Count Compare Failed!\n"; sleep 60; } sub listFiles { my ($dirName) = @_; chdir ($dirName) or die "Can't chdir to $dirName: $!"; opendir my ($scan), $dirName or die "Couldn't opendir $dirName: $! +\n"; return grep {$_ ne '.' && $_ ne '..'} readdir $scan; } sub compress { my @add_array = @{$_[0]}; my $obj = Archive::Zip->new (); # new instance $obj->addFile ($_) foreach @add_array; # add files if ($obj->writeToFileNamed ('testing.zip') != AZ_OK) { # write +to disk print "Error in archive creation!"; } else { print "Archive created successfully!"; } }

Note in particular that an array in scalar context provides the number of elements in the array so the test file count is simply @testFiles for example.

If you find yourself repeating more than a couple of lines of code consider using a sub instead. In this case listFiles not only makes the code more compact, but clears the flow up so it's easier to see where the error was.

Note that this code does not compare files, but only the number of file and directory entries in the subject folders. In particular, if files change names, but the number of files don't this code (probably) will not do what you want!

True laziness is hard work

Replies are listed 'Best First'.
Re^2: Deleting files in the first folder
by sowais (Sexton) on May 10, 2011 at 12:44 UTC
    GrandFather, your code is doing the same as my code. It does not delete the files from the test folder. Thanks for cleaning up the code! could you please help with the deletion of files in the test folder. Owais

      Heh! That's where the "untested" bit comes in, and without testing I suspect the fix is to change the two unlink lines:

      unlink map {"C:\\Perl\\compress\\$_"} @compressFiles; #delete +compressed files unlink map {"C:\\Perl\\test\\$_"} @testFiles; #delete +test files

      readdir doesn't generate full paths so unless the current directory happens to be the directory containing the files to be deleted, the unlink will fail. The map generates the full path to each file to be deleted.

      True laziness is hard work