使用POSIXAPI设置windows创建日期

使用POSIXAPI设置windows创建日期,windows,file,datetime,posix,Windows,File,Datetime,Posix,我有一个程序(jhead),它对Windows和通用Unix变体的编译只做了很少的调整。windows用户不时询问是否可以修改它以同时设置文件的“创建日期/时间”,但我看不到通过POSIXAPI实现这一点的方法。我目前正在做的是: { 结构utimbuf mtime; mtime.actime=NewUnixTime; mtime.modtime=NewUnixTime; utime(文件名和时间); } 理想情况下,struct utimebuf只需要一个创建时间,但它没有。我觉得需要很多特定

我有一个程序(jhead),它对Windows和通用Unix变体的编译只做了很少的调整。windows用户不时询问是否可以修改它以同时设置文件的“创建日期/时间”,但我看不到通过POSIXAPI实现这一点的方法。我目前正在做的是:

{
结构utimbuf mtime;
mtime.actime=NewUnixTime;
mtime.modtime=NewUnixTime;
utime(文件名和时间);
}


理想情况下,struct utimebuf只需要一个创建时间,但它没有。我觉得需要很多特定于windows的、不可移植的代码才能更改windows下的创建时间。是否有其他POSIX方法可以做到这一点?有什么建议吗?

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

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


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

    与Windows API相比,用于此的Win32 API并没有那么糟糕:。最棘手的事情是计算出Windows认为在1601年1月1日到1970年1月1日之间有多少秒;剩下的就直截了当了