【问题标题】:Perl script returning 0 when a file is read读取文件时 Perl 脚本返回 0
【发布时间】:2020-05-20 07:25:24
【问题描述】:

我只是想在处理之前将文件复制到不同的目录。代码如下:

use File::stat;
use File::Copy;
use LWP::UserAgent;
use strict;
use warnings;
use Data::Dumper;
use Cwd qw(getcwd);


my $dir = "\\folder\\music";
my $dir1 = "c:\\temp";

opendir(my $dh, $dir) or die "Cant open directory : $!\n";
#my @list = readdir($dh)

my @files = map { [ stat "$dir/$_", $_ ] }
grep( /Shakira.*.mp3$/, readdir( $dh ) );
closedir($dh);
sub rev_by_date 
{
   $b->[0]->ctime <=> $a->[0]->ctime 
}
my @sorted_files = sort rev_by_date @files;
my @newest = @{$sorted_files[0]};
my $name = pop(@newest);
print "Name: $name\n";
#**********************
#Upto here is working fine



my $new;

open OLD,"<",$name or die "cannot open $old: $!";

问题从这里开始

open(NEW, "> $new") or die "can't open $new: $!"; 
while () 
{ 

print NEW $_ or die "can't write $new: $!";
 } 
close(OLD) or die "can't close $old: $!"; 
close(NEW) or die "can't close $new: $!"; 

我得到的错误是: 无法打开 Shakira - Try Everything (Of​​ficial Video).mp3: no such file or directory at copy.pl line 49.

当我咀嚼文件名时,比如 我的 $oldfile = chomp($name); 那么错误是: 名称:夏奇拉-尝试一切(官方视频).mp3 旧文件为 0 无法打开 0:copy.pl 第 49 行没有这样的文件或目录。

有什么想法吗?

【问题讨论】:

  • 你必须在你的文件前面加上你用于readdir的目录。

标签: perl


【解决方案1】:

chomp 更改其参数并返回删除的字符数。所以正确的用法是

chomp(my $oldfile = $name);

另外,你可能想要

while (<OLD>) {

而不是

while () {

只是无限循环。

此外,您在 stat 调用中正确地将 $dir/ 添加到文件名之前,但您应该在任何地方都这样做。

【讨论】:

  • 非常感谢,chomp 按照你的建议解决了filename = 0的问题,但是打开文件时遇到了同样的问题。
  • @dbnoob:您是否将目录添加到文件名中?
  • 抱歉,之前错过了,是的,现在可以使用了,非常感谢。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多