0

我正在尝试使用 File::Copy 将文件复制到新文件名,但收到错误消息,指出该文件不存在。

print "\nCopying $hash->{Filename1} to $hash->{Filename2}.\n" 
copy( $hash->{Filename1}, $hash->{Filename2} ) or die "Unable to copy model. Copy failed: $!";

我已经检查了两个引用是否都已填充(通过打印它们)并且 $hash->{Filename1} 确实存在 - 它确实存在。

我的错误信息是这样的

Unable to copy model. Copy failed: No such file or directory at B:\Script.pl line 467.

有人知道我可能做错了什么吗?我在脚本的前面使用了完全相同的行,没有任何问题,所以我有点困惑。

File::Copy 有文件大小限制吗?

非常感谢。

4

2 回答 2

2

Filename1可能存在,但是呢Filename2

您的错误消息指出“...没有这样的文件或目录”,因此我将调查您尝试将文件复制到的目录是否存在某种缺陷的可能性

如果目标目录和文件确实存在,您可能还需要检查权限。

第一步是在尝试复制之前打印出两个文件名,以便您可以看到它们是什么,并从该角度调查问题。您还应该在问题中发布这些文件名,以便我们提供进一步帮助。很可能其中一个文件名中有一个狡猾的字符,例如您忘记chomp关闭的换行符。

关于文件大小限制的问题,我不相信模块本身会强加一个。如果您不提供缓冲区大小,则它使用最大 2G 的块用于传输数据,但模块中没有限制整体大小的任何内容。

可能是底层操作系统限制了它,但除非你的文件真的很大或者你的磁盘空间非常低,否则这不会发挥作用。但是,由于您似乎是在b:驱动器上工作,因此您可能需要检查一下。我什至不知道人们不再使用软盘:-)

于 2013-09-24T03:30:23.757 回答
2

检查文件名变量是否没有额外的空格或其他难以发现的问题:

use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper( { filename1 => $hash->{Filename1}, filename2 => $hash->{Filename2} } );
于 2013-09-24T05:44:46.333 回答