The following example uses the GetFileTime function to retrieve the last-write time for a file. It converts the time to local time based on the current time-zone settings, and creates a date and time string that can be shown to the user.
C++ Example
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>
// GetLastWriteTime - Retrieves the last-write time and converts
// the time to a string
//
// Return value - TRUE if successful, FALSE otherwise
// hFile - Valid file handle
// lpszString - Pointer to buffer to receive string
BOOL GetLastWriteTime(HANDLE hFile, LPTSTR lpszString, DWORD dwSize)
{
FILETIME ftCreate, ftAccess, ftWrite;
SYSTEMTIME stUTC, stLocal;
DWORD dwRet;
// Retrieve the file times for the file.
if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
return FALSE;
// Convert the last-write time to local time.
FileTimeToSystemTime(&ftWrite, &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
// Build a string showing the date and time.
dwRet = StringCchPrintf(lpszString, dwSize,
TEXT("%02d/%02d/%d %02d:%02d"),
stLocal.wMonth, stLocal.wDay, stLocal.wYear,
stLocal.wHour, stLocal.wMinute);
if( S_OK == dwRet )
return TRUE;
else return FALSE;
}
int _tmain(int argc, TCHAR *argv[])
{
HANDLE hFile;
TCHAR szBuf[MAX_PATH];
if( argc != 2 )
{
printf("This sample takes a file name as a parameter\n");
return 0;
}
hFile = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
printf("CreateFile failed with %d\n", GetLastError());
return 0;
}
if(GetLastWriteTime( hFile, szBuf, MAX_PATH ))
_tprintf(TEXT("Last write time is: %s\n"), szBuf);
CloseHandle(hFile);
}
PowerBASIC Example
#COMPILE EXE
#DIM ALL
#INCLUDE "windows.inc"
FUNCTION GetLastWriteTime (BYVAL hFile AS DWORD, BYREF strDateTime AS STRING) AS LONG
LOCAL ftCreate, ftAccess, ftWrite AS FILETIME
LOCAL stUTC, stLocal AS SYSTEMTIME
' // Retrieve the file times for the file.
IF GetFileTime(hFile, ftCreate, ftAccess, ftWrite) = 0 THEN EXIT FUNCTION
' // Convert the last-write time to local time.
FileTimeToSystemTime(ftWrite, stUTC)
SystemTimeToTzSpecificLocalTime(BYVAL %NULL, stUTC, stLocal)
' // Build a string showing the date and time.
IF ISMISSING(strDateTime) THEN EXIT FUNCTION
strDateTime = FORMAT$(stLocal.wMonth) & "-" & FORMAT$(stLocal.wDay) & "-" & _
FORMAT$(stLocal.wYear) & " " & FORMAT$(stLocal.wHour) & ":" & _
FORMAT$(stLocal.wMinute)
FUNCTION = %TRUE
END FUNCTION
FUNCTION PBMAIN () AS LONG
LOCAL hFile AS DWORD
LOCAL strBuf AS STRING
LOCAL nError AS LONG
' // Change the file name as needed
hFile = CreateFile("test.txt", %GENERIC_READ, %FILE_SHARE_READ, BYVAL %NULL, _
%OPEN_EXISTING, 0, %NULL)
IF hFile = %INVALID_HANDLE_VALUE THEN
nError = GetLastError
PRINT "CreateFile failed with ", nError
ELSE
IF GetLastWriteTime(hFile, strBuf) THEN
PRINT "Last write time is: " & strBuf
END IF
CloseHandle(hFile)
END IF
WAITKEY$
END FUNCTION