gpt4 book ai didi

perl - readdir() 是否以任何特定顺序返回其结果?

转载 作者:行者123 更新时间:2023-12-05 08:34:40 24 4
gpt4 key购买 nike

我有一个当前正在使用 while 循环处理的目录。文件名实际上是这样的日期:

updates.20130831.1445.hr
updates.20140831.1445.hr
updates.20150831.1445.hr
updates.20160831.1445.hr
updates.20170831.1445.hr

但是,在我的 print 语句中,我注意到 while 循环不是从第一个文件开始的。而是选择第二个或第五个等等。

如果 while 循环是连续的,为什么不是先处理第一个文件,然后处理第二个、第三个等等?我错过了什么吗?

我的 while 循环是这样的:

opendir(DIRECTORY, $Dir) or die $!;

while (my $file = readdir(DIRECTORY)) {
print "$file
open (IN, $file) or die "error reading file: ", $file,"\n"

最佳答案

readdir 内置函数不保证任何顺序,因此您必须手动对名称进行排序:

for my $file (sort readdir DIRECTORY) { ... }

请注意,readdir 不会输出完整路径,因此如果您希望打开该文件,则必须在目录名前添加:

my $path = "$dir/$file";

请注意,条目可以是各种文件系统对象,包括文件、目录、符号链接(symbolic link)和命名管道。在尝试打开它们之前,您应该跳过那些不是文件的文件:

next if not -f $path;

如果您想处理目录,请考虑 readdir 输出包括 ... 目录(当前目录和父目录) ,你应该总是过滤掉:

next if $file eq "." or $file eq "..";

关于perl - readdir() 是否以任何特定顺序返回其结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com