كيف يمكنني الحصول على آخر الوقت المعدل للدليل في بيرل على Windows؟
سؤال
في Perl (على Windows) كيف يمكنني تحديد آخر وقت معدّل للدليل؟
ملحوظة:
opendir my($dirHandle), "$path";
my $modtime = (stat($dirHandle))[9];
النتائج في الخطأ التالي:
يتم تنفيذ وظيفة DIRFD في LINENUMENTNAME.PL.
المحلول 2
من الواضح أن الإجابة الحقيقية هي مجرد استدعاء stat على طريق إلى الدليل (وليس على مقبض الدليل حيث أن العديد من الأمثلة ستعتقد) (على الأقل لنظام التشغيل Windows).
مثال:
my $directory = "C:\\windows";
my @stats = stat $directory;
my $modifiedTime = $stats[9];
إذا كنت ترغب في تحويله إلى وقت محلي يمكنك القيام به:
my $modifiedTime = localtime $stats[9];
إذا كنت تريد أن تفعل كل شيء في سطر واحد يمكنك القيام به:
my $modifiedTime = localtime((stat("C:\\Windows"))[9]);
في ملاحظة جانبية ، تحتوي وحدة Win32 UtcFileTime Perl على خطأ في بناء الجملة الذي يمنع وحدة Perl من تفسير/تجميع بشكل صحيح. مما يعني أنه عندما يتم تضمينه في برنامج نصي Perl ، لن يعمل هذا البرنامج النصي أيضًا بشكل صحيح. عندما أقوم بدمج جميع الكود الفعلي الذي يقوم بأي شيء في البرنامج النصي الخاص بي وأعيد إعادةه إليه ، ينفد بيرل في نهاية المطاف من الذاكرة وتوقف التنفيذ. في كلتا الحالتين هناك الجواب أعلاه.
نصائح أخرى
استخدم ال Win32 :: Utcfiletime الوحدة النمطية على CPAN ، والتي تعكس وظيفة STAT مدمجةواجهة:
use Win32::UTCFileTime qw(:DEFAULT $ErrStr);
@stats = stat $file or die "stat() failed: $ErrStr\n";
my $dir_path = "path_of_your_directory";
my $mod_time = ( stat ( $dir_path ) )[9];