2010-02-02 10 views

risposta

7

Windows (o CRT standard comunque) ha lo stesso utimes famiglia di funzioni che UNIX ha.

struct _utimebuf t; 
t.tma = 1265140799; // party like it's 1999 
t.tmm = 1265140799; 
_utime(fn, &t); 

Utilizzando funzioni Win32, FILE_BASIC_INFO può essere impostato utilizzando SetFileInformationByHandle.

FILE_BASIC_INFO b; 
b.CreationTime.QuadPart = 1265140799; 
b.LastAccessTime.QuadPart = 1265140799; 
b.LastWriteTime.QuadPart = 1265140799; 
b.ChangeTime.QuadPart = 1265140799; 
b.FileAttributes = GetFileAttributes(fn); 
SetFileInformationByHandle(h, FileBasicInfo, &b, sizeof(b)); 
+0

per quanto ho capito _utime su windows non funziona per le directory, perché non vengono trattate come file su Windows –

2

Usa SetFileInformationByHandle con FileInformationType come FILE_BASIC_INFO

+1

tra cui un esempio di codice breve potrebbe essere utile. – bobbymcr

+0

@bobbymcr, e in realtà cercare di trovare le informazioni e quindi codificarle autonomamente potrebbe essere più utile che aspettarsi che qualcun altro faccia tutto il lavoro. – Lazarus

13

Da: http://rosettacode.org/wiki/File/Modification_Time#C

#include <time.h> 
#include <utime.h> 
#include <sys/stat.h> 

const char *filename = "input.txt"; 

int main() { 
    struct stat foo; 
    time_t mtime; 
    struct utimbuf new_times; 

    stat(filename, &foo); 
    mtime = foo.st_mtime; /* seconds since the epoch */ 

    new_times.actime = foo.st_atime; /* keep atime unchanged */ 
    new_times.modtime = time(NULL); /* set mtime to current time */ 
    utime(filename, &new_times); 

    return 0; 
} 
+1

La tua variabile mtime è inutilizzata, ma in caso contrario un'ottima risposta. –

Problemi correlati