我收到一个我不明白的错误。我正在使用File:Find使用Activestate Perl 5.8.8在Windows上递归fylesystem并尝试统计$File::Find::name
;所以我不是stat
- 从需要chomp
- 或删除换行符的文本文件扫描中获取的文件名。我无法获得文件修改时间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重命名
,我也会遇到同样的错误答案 0 :(得分:11)
根据perldiag如果任何文件操作失败并且文件名恰好包含换行符,则会发出警告“包含换行符的文件名不成功”。
假设,正如您所说,文件名来自标准输入或类似文件,并且用户忘记了换行符chomp
。无论如何,您可能希望将字符串传递给chomp
,只是为了查看它是否有效。
有&CORE::stat
mtime可能因操作系统补丁级别和ActiveState Perl版本的某些组合而被破坏 - 建议的解决方法是使用some evidence模块,如下所示:
my $sb = stat($File::Find::name);
my $mtime = scalar localtime $sb->mtime;
...您可能会发现File :: stat的对象表示比CORE::stat
返回的列表更方便。
答案 1 :(得分:0)
即使我在尝试删除文件夹时遇到同样的错误。我在使用rmtree命令之前使用了chomp。这解决了我的问题。
答案 2 :(得分:0)
在我的脚本中遇到同样的问题,并发现我的错误是当我创建文件时,我在最后标记了一个日期戳,并且在将其添加到文件名之前忘记了我的$ DATE变量。
答案 3 :(得分:0)
是的,我自己用手工打造的标量碰到了这个。我的头稍微划了一下,直到我意识到我在文件名中包含了一个时间/日期标记。 Chomp the date命令和瞧,问题解决了。