使用POSIX api设置Windows创建日期

时间:2010-01-01 13:14:02

标签: windows file datetime posix

我有一个程序(jhead),可以编译Windows和通用Unix变种的极少调整。 Windows用户不时会询问是否可以修改它以设置文件的“创建日期/时间”,但是我没有看到使用POSIX API执行此操作的方法。我目前正在做的是:

{
struct utimbuf mtime;
mtime.actime = NewUnixTime;
mtime.modtime = NewUnixTime;
utime(FileName,& mtime);
}

理想情况下,struct utimebuf只有一个创建时间,但事实并非如此。令我感到震惊的是,需要大量特定于Windows的非可移植代码才能在Windows下更改创建时间。还有另一种POSIX方式吗?有什么建议吗?

2 个答案:

答案 0 :(得分:1)

POSIX只识别三个不同的文件时间:

  1. atime (访问时间):上次读取文件
  2. mtime (修改时间):上次写入文件
  3. ctime (属性更改时间):上次修改文件的元数据
  4. 底层操作系统中可能存在的任何其他文件时间都需要特定于操作系统的API调用才能进行修改。

    不要担心创建不可移植的代码;只有这些时间才真正存在于大多数* nix变种之下。

答案 1 :(得分:0)

用于此的Win32 API实际上并不是那么糟糕,因为Windows API会:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724933%28v=vs.85%29.aspx。最棘手的事情是计算出1601年1月1日到1970年1月1日之间Windows 认为的秒数;其余的很简单。