getting filesystem type or accurate file write time
Regan Heath
regan at netwin.co.nz
Tue Jun 13 14:50:36 PDT 2006
On Tue, 13 Jun 2006 15:57:39 +0000 (UTC), <simon.hodson at hssnet.com> wrote:
> Anyone know an easy way of getting the last write time of a file into a
> UTC time
> regardless of the source filesystem?
>
> I need to equate update times on source files and have found that these
> times
> can be different under Windows when the source files are stored on
> different
> filesystems. NTFS uses UTC with no TimeZone) and FAT uses UTC with a
> TimeZone.
> The resolution also appears to be different too, but I'll worry about
> that
> later.
>
> Looks as though I need to find out the filesystem the source file is on
> then
> make the correct translation to UTC.
>
> Anyone got any ideas?
In C, you would use the "stat" function, combined with "gmtime". You can
use both in D too:
import std.stream;
import std.stdio;
import std.c.time;
extern (C) {
struct _stat {
int st_dev;
ushort st_ino;
ushort st_mode;
short st_nlink;
short st_uid;
short st_gid;
// uint st_rdev;
int st_size;
int st_atime;
int st_mtime;
int st_ctime;
}
int stat(char *path, _stat *buffer);
}
void main()
{
_stat buf;
tm *tm;
File f;
f = new File("test36.txt",FileMode.Out);
f.writeLine("Line 1");
f.writeLine("Line 2");
f.close();
if (stat("test36.txt",&buf) == -1) writefln("FAIL");
else {
writefln("st_dev: ",buf.st_dev);
writefln("st_ino: ",buf.st_ino);
writefln("st_mode: ",buf.st_mode);
writefln("st_nlink: ",buf.st_nlink);
writefln("st_uid: ",buf.st_uid);
writefln("st_gid: ",buf.st_gid);
writefln("st_size: ",buf.st_size);
writefln("st_atime: ",buf.st_atime);
writefln("st_mtime: ",buf.st_mtime);
writefln("st_ctime: ",buf.st_ctime);
}
writefln("");
tm = localtime(&buf.st_atime);
if (tm) writefln("Access Time(LCL): ",asctime(tm)[0..24]);
tm = gmtime(&buf.st_atime);
if (tm) writefln("Access Time(GMT): ",asctime(tm)[0..24]);
tm = localtime(&buf.st_mtime);
if (tm) writefln("Modification Time(LCL): ",asctime(tm)[0..24]);
tm = gmtime(&buf.st_mtime);
if (tm) writefln("Modification Time(GMT): ",asctime(tm)[0..24]);
tm = localtime(&buf.st_ctime);
if (tm) writefln("Creation Time(LCL): ",asctime(tm)[0..24]);
tm = gmtime(&buf.st_ctime);
if (tm) writefln("Creation Time(GMT): ",asctime(tm)[0..24]);
}
Regan
More information about the Digitalmars-d-learn
mailing list