2010-02-02 3 views

ответ

7

Windows (или стандартный CRT, во всяком случае) имеет ту же utimes семейство функций UNIX имеет.

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

Использование функций Win32, FILE_BASIC_INFO можно установить с помощью 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

Насколько я понимаю, _utime на windows не работает для каталогов, потому что они не рассматриваются как файлы на окнах –

2

Использование SetFileInformationByHandle с FileInformationType в FILE_BASIC_INFO

+1

Включая краткий пример кода может быть полезным. – bobbymcr

+0

@bobbymcr, и на самом деле пытаться найти информацию, а затем закодировать ее сами, может быть выгоднее, чем ожидать, что кто-то другой сделает всю работу. – Lazarus

13

От: 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

Ваша переменная mtime не используется, но в остальном отличный ответ. –

Смежные вопросы