设置1900年之前的文件修改时间

时间:2012-05-25 14:13:01

标签: windows perl filesystems

我正在创建有问题的数据集,我希望将文件修改时间的年份设置为< 1900。我知道Time::Local使用了1900年的偏移量。我想知道是否有任何方法可以使用此偏移来创建修改时间发生在1900年之前的文件。(Windows Enviroment btw。)

这是我到目前为止使用的代码:

use strict;
use warnings;
use File::stat; 
use Time::localtime;
use Time::Local;

my $file = "test.txt";      
my $when = timelocal(0,0,10,25,6,1899);

#current mod time of the file
my $datetime_string = ctime(stat($file)->mtime);
print $datetime_string,"\n";

#change the mod time of the file
utime $when, $when, $file;

#new mod time
$datetime_string = ctime(stat($file)->mtime);
print $datetime_string,"\n";

编辑:关于@ikegami的评论,我确实开始研究Win32::API。具体来说是Win32API::File::Time。这是我到目前为止的代码:

use Win32API::File::Time qw{:win};
$filename="AnnotationTest.java";
($atime, $mtime, $ctime) = GetFileTime ($filename);
print $mtime,"\n";
SetFileTime ($filename, $atime, $mtime, $ctime);
($atime, $mtime, $ctime) = GetFileTime ($filename);
print $mtime,"\n";

使用此代码,我不能100%确定修改时间的格式是什么。

1 个答案:

答案 0 :(得分:1)

我不确定utime支持那么远。如果它是从1970年开始的带符号的32位偏移,则只能让你到1901年。周围是否有截止 - (2 ** 31)?