Leonid L wrote: > On Jun 27, 1:52 pm, [EMAIL PROTECTED] (Paul Lalli) wrote: >> On Jun 26, 5:50 pm, [EMAIL PROTECTED] (Leonid L) wrote: >> >>> Many of the proposed solutions I've found on Google do not work for >>> me, perhaps because they assume Unix/Linux host. >> Or, perhaps because you're doing something wrong? How about posting >> one of these methods that "don't work", so we can evaluate for >> ourselves? >> >>> I need a sub that >>> will reliably tell me whether a given directory isempty(I am running >>> Perl on Win XP, NTFS file system). Please give your implementation a >>> quick test on a similar platform before posting. >> There's a couple hundred ways. Here's two: >> >> #!/usr/bin/perl >> use strict; >> use warnings; >> >> mkdir("working_dir") or die "Cannot create working_dir: $!"; >> chdir("working_dir") or die "Cannot change to working_dir: $!"; >> >> mkdir("empty") or die "Can't createempty: $!"; >> mkdir("subdir") or die "Can't create subdir: $!"; >> mkdir("subdir/foo") or die "Can't create subdir/foo: $!"; >> mkdir("file") or die "Can't create file: $!"; >> open my $ofh, '>', "file/bar" or die "Can't create file/bar: $!"; >> close $ofh; >> mkdir("dotfile") or die "Can't create dotfile: $!"; >> open my $ofh2, '>', "dotfile/.baz" or die "Can't create dotfile/.baz: >> $!"; close $ofh2; >> >> for my $dir(qw/emptysubdir file dotfile/) { >> print is_empty1($dir) ? "$dirisempty\n" : "$diris notempty\n"; >> print is_empty2($dir) ? "$dirisempty\n" : "$diris notempty\n"; >> >> } >> >> sub is_empty1 { >> my $dir= shift; >> my @contents = grep { ! /^$dir\/\.\.?$/ } glob("$dir/* $dir/.*"); >> return @contents == 0; >> >> } >> >> sub is_empty2 { >> my $dir= shift; >> opendir my $dh, $diror die "Cannot open $dir: $!"; >> my @contents = grep { ! /^\.\.?$/ } readdir($dh); >> return @contents == 0;} >> >> __END__ >> >> Results:emptyisemptyemptyisempty >> subdir is notempty >> subdir is notempty >> file is notempty >> file is notempty >> dotfile is notempty >> dotfile is notempty >> >> This is perl, v5.10.0 built for MSWin32-x86-multi-thread >> >> Paul Lalli > > Thank you all for your posts. The second version works better when the > file path looks like "\\server\subDirL1\subDirl2\...". > I find Python version a bit more readable: > import os > def dirEmpty(path): > return len(os.listdir(path)) == 0 > Still, it is too bad that in either language there is no simple API > call that would return a simple True/False answer that I am looking > for ...
How about this? Rob sub dirempty { my $path = shift; listdir($path) == 0; } sub listdir { my $path = shift; opendir my $dh, $path or return undef; grep { not /^\.\.?$/ } readdir $dh; } -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/