Почему Perl жалуется на «Неудачная статистика по имени файла, содержащему перевод строки»? - PullRequest
4 голосов
/ 16 апреля 2010

Я получаю ошибку, которую не понимаю. Я использую File: Find для ревизии файловой системы в Windows с использованием Activestate Perl 5.8.8 и пытаюсь выполнить stat $File::Find::name; поэтому я не stat -ing имя файла, полученное в результате сканирования текстового файла, требующего chomp -ing или удаления новой строки. Мне не удалось получить время изменения файла, mtime in:

my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($File::Find::name);

так пытается

-s $File::Find::name 

дает мне ошибку:

Неудачная статистика по имени файла, содержащему символ новой строки

Типичное имя найденного файла: F01-01-10 Num 0-00000.pdf , но я получаю ту же ошибку даже при переименовании в E02.pdf

Ответы [ 4 ]

11 голосов
/ 16 апреля 2010

Согласно perldiag , если любая файловая операция завершается неудачно и имя файла содержит символ новой строки, будет выдано предупреждение «Неудачно для имени файла, содержащего символ новой строки».

Предполагается, что, как вы говорите, имя файла пришло из стандартного ввода или аналогичного, и пользователь забыл chomp перевод строки. В любом случае вы можете пропустить строку через chomp, просто чтобы посмотреть, работает ли она.

Имеются некоторые свидетельства , что &CORE::stat mtime может быть нарушен при некоторых комбинациях версий исправлений ОС и Perl ActiveState - предлагаемое решение - использовать модуль File :: stat вот так:

my $sb = stat($File::Find::name);
my $mtime = scalar localtime $sb->mtime;

... вам может показаться, что представление объекта File :: stat более удобно, чем список, возвращаемый CORE::stat.

0 голосов
/ 12 октября 2012

Да, я сам столкнулся с этим со скалярным устройством ручной сборки. Немного почесал голову, пока не понял, что в имени файла есть отметка времени / даты. Chomp дата команды и вуаля, проблема решена.

0 голосов
/ 29 июля 2010

Я столкнулся с той же проблемой в моем скрипте и обнаружил, что ошибался, когда создавал файл, помечал отметку даты до конца и забыл сжать переменную $ DATE перед добавлением ее в имя файла.

0 голосов
/ 29 мая 2010

Даже я получил ту же ошибку при попытке удалить папку. я использовал chomp перед использованием команды rmtree. Это решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...