كيف يمكنني الحصول على آخر الوقت المعدل للدليل في بيرل على Windows؟

StackOverflow https://stackoverflow.com/questions/2656519

  •  27-09-2019
  •  | 
  •  

سؤال

في 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];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top