Oxygen Basic
Programming => Example Code => Topic started by: chrisc on April 24, 2018, 04:36:09 AM
-
Hello
this is a program that allows you to set the date and time of a specified file
just place in any txt file called "myfile.txt" in the same folder as the compile program Set_FileTime.exe
and run this exe, it will reset the date to Apr 18 2018 and time 6:55 pm
if you find any problem with this code please feel free to modify it and let us know about it. Thanxx
' Set_FileTime.o2bas
' Set the time and date of a file
$ filename "Set_FileTime.exe"
uses RTL64
uses corewin
uses Timeutil
' https://msdn.microsoft.com/en-us/library/windows/desktop/aa365282(v=vs.85).aspx
typedef struct _OFSTRUCT {
BYTE cBytes;
BYTE fFixedDisk;
WORD nErrCode;
WORD Reserved1;
WORD Reserved2;
CHAR szPathName[OFS_MAXPATHNAME];
} OFSTRUCT, *POFSTRUCT;
'=====================================================
' SetFileDate - Set the time and date of a file
'
SUB SetFileDate(sFileName AS STRING, _
iYear AS LONG, iMonth AS LONG, iDay AS LONG, _
iHour AS LONG, iMinute AS LONG, iSecond AS LONG) EXPORT
LOCAL hFile AS sys
LOCAL CreationTime AS FILETIME
LOCAL LastAccessTime AS FILETIME
LOCAL LastWriteTime AS FILETIME
LOCAL gfSyT AS SYSTEMTIME
LOCAL gfLT AS FILETIME
LOCAL gfCT AS FILETIME
LOCAL gfLAT AS FILETIME
LOCAL lpReOpenBuff AS OFSTRUCT
hFile = CreateFile(sFileName + CHR$(0), BYVAL %GENERIC_READ OR %GENERIC_WRITE, _
BYVAL 0, BYVAL %NULL, BYVAL %OPEN_ALWAYS, _
BYVAL %FILE_ATTRIBUTE_NORMAL, BYVAL %NULL)
IF hFile THEN
FileTimeToLocalFileTime LastWriteTime, gfLT
FileTimeToSystemTime gfLT, gfSyT
FileTimeToLocalFileTime CreationTime, gfCT
FileTimeToLocalFileTime LastAccessTime, gfLAT
gfSyT.wYear = iYear
gfSyT.wMonth = iMonth
gfSyT.wDay = iDay
gfSyT.wHour = iHour
gfSyT.wMinute = iMinute
gfSyT.wSecond = iSecond
SystemTimeToFileTime gfSyT, gfLT
LocalFileTimeToFileTime gfLT, LastWriteTime
SystemTimeToFileTime gfSyT, gfLAT
LocalFileTimeToFileTime gfLAT, LastAccessTime
SystemTimeToFileTime gfSyT, gfCT
LocalFileTimeToFileTime gfCT, CreationTime
SetFileTime BYVAL hFile, CreationTime, LastAccessTime, LastWriteTime
CloseHandle hFile
END IF
END SUB
'========================
' Main start
string gProgNam
' Set the time of a specific file to a particular date and time
gProgNam = "myfile.txt"
SetFileDate(gProgNam, 2018,04,18,18,55, 22)
print "done"
-
Thank you Chris, for sharing this routine which makes sense and is useful in some cases. It can be run in JIT mode and be compiled as 32-bit and 64-bit executable. This is why I would prefer a notation like this:
$ filename "Set_FileTime.exe"
'uses RTL32
'uses RTL64
Although this is only a matter of taste, OxygenBasic usually supports all three modes, maybe this will change. But as long as it is possible I think it is a nice feature to run a program directly from the editor without the need to compile it to an executable. If everything works correctly then an exe file can be created anyway. Nevertheless I like your app very much.
Roland
-
Good to hear that you like it Roland. i 'll do my best to convert our existing PB 32bit software
to O2 and will publish their solutions in this forum.
as my company is converting from PB 32bit to O2 64bit, i only use RTL64
and i have to make sure that all the executables be able to run in 64bit environment.
and that we prefer to use notepad rather than oxide, and we find that o2 is a very versatile
and flexible programming language, it can also read c++ headers. i think Charles is one
of the best compiler writer in the world.
-
It will be good for O2 that someone was successful at porting PB to O2. Maybe others will give it a shot.