opendir的结果似乎是在它被调用时目录中的文件列表。如果你改变了目录,你需要调用rewinddir:
my $dir_snippets = "/tmp/fruit";
system ("rm -rf $dir_snippets");
mkdir $dir_snippets or die $!;
my $banana = "$dir_snippets/banana";
system ("touch $banana");
opendir(SNIPPETS, $dir_snippets); # or die...
while (my $snippet = readdir(SNIPPETS)) {
if (-f $banana) {
unlink $banana;
rewinddir SNIPPETS;
}
print ">>>".$snippet."\n";
}
closedir(SNIPPETS);
给你
>>>.
>>>.
>>>..
没有rewinddir你
>>>.
>>>..
>>>banana
只是肝炎测试,我得到同样的事情:
#include
#include
#include
#include
#include
#include
int main()
{
DIR * fruit;
struct dirent * file;
fruit = opendir ("/tmp/fruit");
if (! fruit) {
fprintf (stderr, "opendir failed: %s\n", strerror (errno));
exit (EXIT_FAILURE);
}
while (file = readdir (fruit)) {
unlink ("/tmp/fruit/banana");
printf (">>> %s\n", file->d_name);
}
closedir (fruit);
}
提供了以下(以“触摸”创建文件“香蕉”后):
$ ./a.out
>>> .
>>> ..
>>> banana
$ ./a.out
>>> .
>>> ..