Если opendir Perl всегда возвращаются. и.. сначала?

  opendir MYDIR, "$dir";
  my @FILES = readdir MYDIR;
  closedir MYDIR;

Кажется, что 99,9% времени первые две записи в массиве всегда“.” и “..”. Более поздняя логика в сценарии имеет проблемы, если это не верно. Я столкнулся со случаем, где записи каталога появились позже. Действительно ли это показательно из файловой системы, являющейся поврежденным или что-то еще? Существует ли известный порядок к тому, что возвращает opendir?

10
задан brian d foy 17 April 2010 в 13:09
поделиться

3 ответа

Это всегда порядок операционной системы, представленный несортированным сырым.

Хотя . и .. очень часто являются первыми двумя записями, это потому, что они были первыми двумя созданными записями. Если по какой-то причине одна из них была удалена (через неестественные последовательности, поскольку обычно это предотвращается), следующий fsck (или эквивалент) исправит каталог, чтобы в нем снова были обе записи. Это поместит одно из имен на более позднее место в списке.

Следовательно, не надо просто "пропускать первые две записи". Вместо этого сопоставьте их явно, чтобы отбросить их.

21
ответ дан 3 December 2019 в 14:18
поделиться

Порядок ниже ОС и явно не иначе определено.

Их достаточно легко отфильтровать.

   opendir MYDIR, "$dir";
   my @FILES = grep !/^\.\.?$/, readdir MYDIR  ;
   closedir MYDIR;
8
ответ дан 3 December 2019 в 14:18
поделиться

Используйте File :: Slurp :: read_dir , который по умолчанию возвращает список, который не включает . и .. .

6
ответ дан 3 December 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: