Установка даты создания Windows с помощью POSIX API

У меня есть программа (jhead), которая компилируется с очень небольшим количеством настроек как для Windows, так и для общих вариантов Unix. Время от времени пользователи Windows спрашивают, можно ли изменить его, чтобы также установить «дату/время создания» файлов, но я не вижу способа сделать это с помощью API POSIX. Что я сейчас делаю:

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

В идеале структура utimebuf должна иметь только время создания, но его нет. Мне кажется, что для изменения времени создания под Windows потребуется много специфичного для Windows непереносимого кода. Есть ли другой способ POSIX сделать это? Какие-либо предложения?


person Matthias Wandel    schedule 01.01.2010    source источник


Ответы (2)


POSIX распознает только три разных времени файла:

  1. atime (время доступа): время последнего чтения файла.
  2. mtime (время модификации): время последней записи файла.
  3. ctime (время изменения атрибута): время последнего изменения метаданных файла.

Для изменения любых других файловых времен, которые могут существовать в базовой ОС, требуются специфичные для ОС вызовы API.

И не беспокойтесь о создании непереносимого кода; только эти времена действительно существуют в большинстве вариантов * nix.

person Ignacio Vazquez-Abrams    schedule 01.01.2010

API Win32 для этого не так уж и плох, как API Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724933%28v=vs.85%29.aspx . Самое сложное — вычислить, сколько секунд Windows думает между 1 января 1601 года и 1 января 1970 года; остальное прямо.

person Daira Hopwood    schedule 22.05.2015