Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как установить время создания файла с точностью до миллисекунды? (http://forum.oszone.net/showthread.php?t=206739)

elakt 12-05-2011 19:40 1675138

Как установить время создания файла с точностью до миллисекунды?
 
Добрый день!

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

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

andr_mozg 13-05-2011 11:55 1675549

эта информацыя не хронится. то есть нельзя.

elakt 13-05-2011 14:15 1675650

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

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

Вопрос - как?

Yashied 14-05-2011 00:10 1675955

_Date_Time_SetFileTime()

elakt 14-05-2011 20:15 1676389

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 1676464

Папки нужно открывать с флагом FILE_FLAG_BACKUP_SEMANTICS, но _WinAPI_CreateFile() его не поддерживает. Используйте _WinAPI_CreateFileEx() из библиотеки WinAPIEx.au3:

Для папок:

Код:

$hFile = _WinAPI_CreateFileEx(@ScriptDir & '\myTestFolder', $OPEN_EXISTING, 0, 0, $FILE_FLAG_BACKUP_SEMANTICS)
Для файлов:

Код:

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


Время: 22:19.

Время: 22:19.
© OSzone.net 2001-