digitalmars.D.learn - getting filesystem type or accurate file write time
- simon.hodson hssnet.com (11/11) Jun 13 2006 Anyone know an easy way of getting the last write time of a file into a ...
- Derek Parnell (7/10) Jun 13 2006 I have some routines that I use in Build. Download the source and look a...
- Regan Heath (67/83) Jun 13 2006 In C, you would use the "stat" function, combined with "gmtime". You can...
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? Simon
Jun 13 2006
On Wed, 14 Jun 2006 01:57:39 +1000, <simon.hodson 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 have some routines that I use in Build. Download the source and look at util/fdt.d I can post it here but its about 300 lines of code. -- Derek Parnell Melbourne, Australia
Jun 13 2006
On Tue, 13 Jun 2006 15:57:39 +0000 (UTC), <simon.hodson 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
Jun 13 2006