Войти

Показать полную графическую версию : [решено] Как установить время создания файла с точностью до миллисекунды?


elakt
12-05-2011, 19:40
Добрый день!

Для чтения/установки времени создания файла/папки есть функции FileGetTime и FileSetTime, они "работают" с точностью до секунд.

Подскажите, пожалуйста, есть ли возможность узнать/установить время создания с точностью до миллисекунды?

andr_mozg
13-05-2011, 11:55
эта информацыя не хронится. то есть нельзя.

elakt
13-05-2011, 14:15
Эта информация хранится, это точно. По крайней мере для файловой системы NTFS.
Это можно видеть (и изменять) в последней версии Far Manager.
Так же есть специальная консольная утилита, которая позволяет это делать.

Раз это возможно для других программ, то наверное как-то можно сделать и средствами AutoIt.

Вопрос - как?

Yashied
14-05-2011, 00:10
_Date_Time_SetFileTime()

elakt
14-05-2011, 20:15
Yashied

Я как раз копал в этом направлении. Что у меня получилось:

Установить время создания файла с точностью до миллисекунды (для файловой системы NTFS):

#include <Date.au3>

_Main()

Func _Main()

Local $hFile, $tFile, $aTime
; открываем существующий или создаем новый тестовый файл
$hFile = _WinAPI_CreateFile(@ScriptDir & "\myTestFile.txt", 3)
if $hFile = 0 then _WinAPI_ShowError("Unable to create file")
; устанавливаем время с точностью до миллисекунды (для файловой системы NTFS)
$tFile = _Date_Time_EncodeFileTime(@MON, @MDAY, @YEAR, @HOUR, @MIN, @SEC, 123)
$pFile = DllStructGetPtr($tFile)
_Date_Time_SetFileTime($hFile, $pFile)
_WinAPI_CloseHandle($hFile)

EndFunc ;==>_Main

Прочитать время создания файла с точностью до миллисекунды (для файловой системы NTFS):

#include <Date.au3>

_Main()

Func _Main()

Local $hFile, $tFile, $aTime, $aDate, $val
; открываем существующий тестовый файл
$hFile = _WinAPI_CreateFile(@ScriptDir & "\myTestFile.txt", 2)
if $hFile = 0 then _WinAPI_ShowError("Unable to create file")
; читаем время создания, модификации и последнего доступа к файлу
$aTime = _Date_Time_GetFileTime($hFile)
_WinAPI_CloseHandle($hFile)
; выводим время Создания файла с точностью до миллисекунды
$aDate = _Date_Time_FileTimeToArray($aTime[0])
$val = StringFormat("%04d/%02d/%02d %02d:%02d:%02d,%03d", $aDate[2], $aDate[1], $aDate[0], $aDate[3], $aDate[4], $aDate[5], $aDate[6])
MsgBox (0, "", "Created ..: " & $val)

EndFunc ;==>_Main

Но таким образом я могу работать только с ФАЙЛАМИ.

Подскажите, пожалуйста, как можно сделать то же самое для ПАПКИ?

Yashied
14-05-2011, 22:38
Папки нужно открывать с флагом FILE_FLAG_BACKUP_SEMANTICS, но _WinAPI_CreateFile() его не поддерживает. Используйте _WinAPI_CreateFileEx() из библиотеки WinAPIEx.au3 (http://autoit-script.ru/index.php?topic=47.0):

Для папок:

$hFile = _WinAPI_CreateFileEx(@ScriptDir & '\myTestFolder', $OPEN_EXISTING, 0, 0, $FILE_FLAG_BACKUP_SEMANTICS)

Для файлов:

$hFile = _WinAPI_CreateFileEx(@ScriptDir & '\myTestFile.txt', $OPEN_EXISTING, 0, 0)




© OSzone.net 2001-2012