私は 2 つのディレクトリを持っており、それぞれに画像が含まれています。地域ディレクトリは 5 分ごとに更新され、監視ディレクトリは 15 分ごとに更新されます。
私がやろうとしているのは、各ディレクトリで最新のファイルを見つけて、それらのファイルを取得し、Image Magikを使用して 3 番目のイメージを作成することです。
私が持っているものは一部で機能しますが、非常に一貫性がありません。たとえば、時計ファイルと時間が一致すると、コードが地域ファイルを見逃すことがあります。
また、監視ファイルと地域ファイルが 2 つの別々のディレクトリにある場合でも、2 つの監視ファイルをマージする場合があります。
修正方法がわかりません。
これが私のコードです:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use vars qw/%files_watch/;
use vars qw/%files_regional/;
sub findNewestFiles {
my $element = $File::Find::name;
return if ( !-f $element );
$files_watch{$element} = ( stat($element) )[10];
$files_regional{$element} = ( stat($element) )[10];
}
my $image_magick_exe = "composite.exe\"";
my $pic_dir = "C:\\eterra\\eterravision\\weather";
my $watch_dir = "C:\\eterra\\eterravision\\weather\\watch";
my $regional_dir = "C:\\eterra\\eterravision\\weather\\regional";
open( OUT, ">>names.txt" ) || die;
find( \&findNewestFiles, $watch_dir );
my $newestfile_watch;
my $time_watch = 0;
while ( my ( $t1, $t2 ) = each(%files_watch) ) {
if ( $t2 > $time_watch ) {
$newestfile_watch = $t1;
$time_watch = $t2;
}
}
$time_watch = localtime($time_watch);
find( \&findNewestFiles, $regional_dir );
my $newestfile_regional;
my $time_regional = 0;
while ( my ( $t3, $t4 ) = each(%files_regional) ) {
if ( $t4 > $time_regional ) {
$newestfile_regional = $t3;
$time_regional = $t4;
}
}
$time_regional = localtime($time_regional);
$newestfile_watch =~ s/\//\\/g;
$newestfile_regional =~ s/\//\\/g; #replacing the "/" in the file path to "\"
my @temp = split( /_/, $newestfile_regional );
my $type = $temp[0];
my $date = $temp[1];
my $time = $temp[2];
my $check = "$pic_dir/radarwatch\_$date\_$time"; #check if file was created
unless ( -e $check )
{
system("\"$image_magick_exe \"$newestfile_regional\" \"$newestfile_watch\" \"$pic_dir\\radarwatch\_$date\_$time\"");
print "file created\n";
}
サブ機能の[10]を[8]、[9]に変更しました。8 がアクセス時間、9 が変更時間、10 が作成時間で、10 が最も成功しています。
問題はサブ機能にあると思います。最新の作成時間を検索するより良い方法はありますか? 私が持っているものよりも信頼できるものはありますか?