www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - getting filesystem type or accurate file write time

reply simon.hodson hssnet.com writes:
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
next sibling parent "Derek Parnell" <derek psych.ward> writes:
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
prev sibling parent "Regan Heath" <regan netwin.co.nz> writes:
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