Skip to content

Latest commit

 

History

History
84 lines (61 loc) · 2.73 KB

sample_399.md

File metadata and controls

84 lines (61 loc) · 2.73 KB

Home

How to set Creation Date/Time for a folder (WinNT)

Before you begin:

This code sample has been translated from VB code. The original link is Modifying the Date/Time of Folders and Files Under Windows NT+ at VBNet developers resource centre.


Code:

? ChangeFolderFileDate("c:\myfolder", DATETIME())

FUNCTION ChangeFolderFileDate(cFolder, tDate)
#DEFINE GENERIC_WRITE  0x40000000
#DEFINE GENERIC_READ   0x80000000
#DEFINE FILE_SHARE_DELETE 4
#DEFINE FILE_SHARE_READ   1
#DEFINE OPEN_EXISTING     3
#DEFINE FILE_FLAG_BACKUP_SEMANTICS 0x02000000

	DECLARE INTEGER CreateFile IN kernel32;
		STRING lpFileName, INTEGER dwDesiredAccess,;
		INTEGER dwShareMode, INTEGER lpSecurityAttr,;
		INTEGER dwCreationDisp, INTEGER dwFlagsAndAttrs,;
		INTEGER hTemplateFile

	LOCAL hFolder
	
	* use CreateFile for Windows NT/XP/2000 and OpenFile for Win9/Me
	hFolder = CreateFile(cFolder, GENERIC_WRITE+GENERIC_READ,;
		FILE_SHARE_READ+FILE_SHARE_DELETE, 0, OPEN_EXISTING,;
		FILE_FLAG_BACKUP_SEMANTICS, 0)

	IF hFolder = -1  && failed to open
		RETURN .F.   && use GetLastError to get an error code
	ENDIF

	DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject

	DECLARE INTEGER SetFileTime IN kernel32;
		INTEGER hFile, STRING lpCreationTime,;
		STRING lpLastAccessTime, STRING lpLastWriteTime

	DECLARE INTEGER SystemTimeToFileTime IN kernel32;
		STRING lpSystemTime, STRING @lpFileTime

	DECLARE INTEGER LocalFileTimeToFileTime IN kernel32;
		STRING lpLocalFileTime, STRING @lpFileTime

	LOCAL cSysTime, cFileTime, nResult
	cFileTime = Repli(Chr(0),8)

	cSysTime = num2buf(Year(tDate)) + num2buf(Month(tDate)) +;
		num2buf(DOW(tDate,0)) + num2buf(Day(tDate)) +;
		num2buf(Hour(tDate)) + num2buf(Minute(tDate)) + Repli(Chr(0),4)

	* converting SYSTEMTIME data to FILITIME
	= SystemTimeToFileTime(cSysTime, @cFileTime)
	
	* in case your local time is different from UTC
	= LocalFileTimeToFileTime(cFileTime, @cFileTime)

	* file handle, created, last-access, last-write
	nResult = SetFileTime(hFolder, cFileTime, 0,0)

	= CloseHandle(hFolder)  && important
RETURN (nResult <> 0)

FUNCTION num2buf(nValue)
RETURN Chr(MOD(m.nValue,256)) + CHR(INT(m.nValue/256))  

Listed functions:

CloseHandle
CreateFile
GetLastError
LocalFileTimeToFileTime
OpenFile
SetFileTime
SystemTimeToFileTime