2012-09-19 14 views
5

Windows offre qualcosa come il campo st_ctime di POSIX stat, che fornisce il timestamp dell'ultima modifica dei metadati?Windows e ctime/st_ctime

Background: ho alcuni file di dati che vorrei controllare se sono stati modificati da un determinato timestamp. Controllare il timestamp modificato (mtime) è facile e si occupa delle modifiche "normali", ma se l'utente copia su versioni precedenti dei file di dati, il timestamp modificato mostrerà che sono più vecchi. Su un sistema POSIX, copiare su un file più vecchio comporterebbe il ctime essere più recente, anche se mtime è più vecchio.

risposta

2

Per quanto ne so, Windows fa fornisce un campo "ultimo modificato", ma non ho trovato alcuna API Win32 per accedervi, quindi è necessario utilizzare l'API nativa.

In particolare: (non ho davvero provato questo.)

L'utilizzo dell'API nativa non è esattamente semplice. This question and answer descrive come farlo.

Cygwin sfrutta questo per fornire semantica POSIX in Windows, come discusso on their mailing list. Ricevo le mie informazioni da their implementation.

E sebbene sia solo collegato in modo tangenziale, this article ha una buona descrizione del timestamp "creato" che Windows presenta (e purtroppo si riferisce a ctime). Il timestamp creato può essere più recente rispetto al timestamp modificato se un file viene copiato in una nuova posizione (poiché creato si riferisce a quando è stata creata la copia, mentre si riferisce a quando l'originale è stato modificato l'ultima volta), ma non viene aggiornato quando non viene i metadati sono cambiati.

+1

Grazie, sì, questo è quello che @piscisaureus ha finito per fare in libuv. ctime è ora implementato con la semantica Unix (aka, "correttamente") in libuv: https://github.com/joyent/libuv/commit/20a8e58adb2a3fc2e92ceb6e1ceb6f05d7e0d439 Anche se questa risposta è arrivata dopo che l'avremmo già trovata, ha assegnato la taglia perché hai aiutato i futuri utenti a trovare la risposta corretta :) – isaacs