我想做的事情相当简单: 1)从硬编码的URL下载文件(它将始终保持不变) 2)检查文件是否真的是PDF (我认为最好检查神奇的数字%PDF) 3)如果是这样,重命名文件并移动到文件夹xy||如果不是,请相应地重命名。
注意:要在Windows 7系统上运行,这是必需的。
下面是我的代码:
#!/usr/bin/perl
use warnings;
use strict;
use LWP::Simple;
use POSIX qw( strftime );
use File::Copy;
use File::Type;
my $date = strftime("%m/%d/%Y", localtime);
my $url = "http://www.oracle.com/technetwork/database/options"
."/advanced-analytics/r-enterprise/ore-reference-manual-1882822.pdf";
my $dlfile = "Test.pdf";
my $resp = '';
my $srcdir = "C:\\pdfscripthome";
my $dest = "C:\\pdfdump";
my $old = "$srcdir/$dlfile";
$resp = getstore( $url, $dlfile );
sub CheckFileType {
my $chkfile="$srcdir//Test.pdf";
my $ft = File::Type->new();
my $file_type = $ft->mime_type($chkfile);
if ( $file_type eq 'application/pdf' ) {
move( $old, $dest ) or die "Move $old -> $dest failed: $!";
}
else {
rename ("//$srcdir/Test.pdf", "//$srcdir/NotAValidPDFFile.pdf" )
|| die ("Error in renaming");
}
}
sub main{
&CheckFileType();
}
&main;
当我尝试执行时,发生的情况是什么都没有发生。奇怪的是,当我评论
use File::Type;
输出时,它会下载该文件(当然不会进行检查)。
我假设sub CheckFileType { }
中的某个地方有错误,但我看不到它。
发布于 2015-05-01 01:27:46
我使用Strawberry Perl v5.20.2在Windows7上成功地执行了您的Perl程序(没有更改)。
我很想提出几个更改,但我决定提供一个简单的更改,这将使您的程序成功完成。
在第25行的mime_type()
调用中,将参数$chkfile
替换为$dlfile
。这将导致mime_type()
在调用getstore()
期间在第16行查找存储的文件,其中$dlfile
作为指定文件名的参数传递。
第25行(原始):
my $file_type = $ft->mime_type($chkfile);
第25行(合并建议的更改):
my $file_type = $ft->mime_type($dlfile);
在没有更改的情况下,Perl程序首先将下载的相对于用户当前工作目录的.\Test.pdf
文件存储为文件名PDF,然后使用绝对路径C:\pdfscripthome\Test.pdf
查找该文件。
如果用户的当前工作目录为C:\pdfscripthome
,则程序成功。在用户的当前工作目录不是C:\pdfscripthome
的情况下,程序会失败,因为调用mime_type()
时传递的参数包含绝对路径C:\pdfscripthome\Test.pdf
。
https://stackoverflow.com/questions/29943371
复制