I've encountered a problem with a single file where I cannot retrieve it's Date-time. So far my code has worked well for over 30 files, but this one is a mystery I cannot debug myself due to insufficient Au3 knowledge.
In line 11 "_Date_Time_FileTimeToArray" is called and for this particular file it sets the @error to 10. I don't know what that error code means, but it's not set by the _Date functions themselves I think.
Overall, it could be a problem caused by any of the functions below, how can I properly debug this? / Does anybody know a what's causing this?
_WinAPI_CreateFile() / _Date_Time_GetFileTime() / _Date_Time_FileTimeToArray()
Func _SetFileTimes($sFilePath)
Local $monthNumber[13] = ["", "January", "February", "March", "April", "May", "Juny", "July", "August", "September", "October", "November", "December"]
Local $dayNumber[7] = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
Local $fHandle = _WinAPI_CreateFile($sFilePath, 2, 2) ; read-only
; may NOT return a valid date for some reason! TODO
Local $fTagFILETIME = _Date_Time_GetFileTime($fHandle)
_WinAPI_CloseHandle($fHandle)
; This will return an empty array if theres no valid date
$fModTime = _Date_Time_FileTimeToArray($fTagFILETIME[2]) ; last Modified
if @error <> 10 then
Local $year = $fModTime[2]
Local $month = $fModTime[0]
Local $day = $fModTime[1]
Local $hour = $fModTime[3]
Local $min = $fModTime[4]
Local $sec = $fModTime[5]
Local $ms = $fModTime[6]
Local $weekday = $fModTime[7]
Global $prettyTimestamp = StringFormat("%s, %s %d, %04d %02d:%02d:%02d", $dayNumber[$weekday], $monthNumber[$month], $day, $year, $hour, $min, $sec)
Global $uploadDate = StringFormat("%04d-%02d-%02d", $year, $month, $day)
$fModTime = _Date_Time_FileTimeToArray(_Date_Time_FileTimeToLocalFileTime($fTagFILETIME[2])) ; last Modified
Local $year = $fModTime[2]
Local $month = $fModTime[0]
Local $day = $fModTime[1]
Local $hour = $fModTime[3]
Local $min = $fModTime[4]
Local $sec = $fModTime[5]
Local $ms = $fModTime[6]
Local $weekday = $fModTime[7]
; GetUnixTime accounts for Local time, hence feed it local time
Global $unixTimestamp = _GetUnixTime($year &"/"& $month &"/"& $day &" "& $hour&":"& $min &":"& $sec)
else
Global $prettyTimestamp = "N/A"
Global $uploadDate = ""
Global $unixTimestamp = "N/A"
endif
endfunc
_GetUnixTime returned the year 1601 start date, showing that $fModTime is probably equal 0. (But Why?)
The file reports these dates in Explorer, it's on local NTFS drive:
Created: Wednesday, 31. Januar 2018, 18:55:02
Modified: Wednesday, 10. Januar 2018, 12:39:23
Accessed: Wednesday, 10. Januar 2018, 12:39:23