Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Изменить FileTime… Добавлено: 06.04.05 19:21  

Автор вопроса:  Mihalыch | ICQ: 373-509-101 
Всем привет!
Странно, с помощью этого кода, у меня получается установить дату не ранее 01.01.1980 00:00:01. Подскажите почему?

    Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
    End Type
    Private Type SYSTEMTIME
        wYear As Integer
        wMonth As Integer
        wDayOfWeek As Integer
        wDay As Integer
        wHour As Integer
        wMinute As Integer
        wSecond As Integer
        wMilliseconds As Integer
    End Type
    Private Const GENERIC_WRITE = &H40000000
    Private Const OPEN_EXISTING = 3
    Private Const FILE_SHARE_READ = &H1
    Private Const FILE_SHARE_WRITE = &H2
    Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
    Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
    Private Declare Function SetFileTime Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpCreationTime As FILETIME, ByRef lpLastAccessTime As FILETIME, ByRef lpLastWriteTime As FILETIME) As Long
Private Sub ChengeFileTime()
    Dim nDate As Date
    Dim hFile As Long
    Dim nFileTime As FILETIME
    Dim nLocalTime As FILETIME
    Dim SysTime As SYSTEMTIME
    nDate = "01.01.1980 00:00:01"
    With SysTime
        .wYear = Year(nDate)
        .wMonth = Month(nDate)
        .wDay = Day(nDate)
        .wDayOfWeek = Weekday(nDate) - 1
        .wHour = Hour(nDate)
        .wMinute = Minute(nDate)
        .wSecond = Second(nDate)
        .wMilliseconds = 0
    End With
    SystemTimeToFileTime SysTime, nLocalTime
    LocalFileTimeToFileTime nLocalTime, nFileTime
    hFile = CreateFile("C:\1.txt", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
    SetFileTime hFile, nFileTime, nFileTime, nFileTime
    CloseHandle hFile
End Sub

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 06.04.05 20:30
По моему BIOS меньше не поддерживает. А зачем тебе?

Ответить

Номер ответа: 2
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #2 Добавлено: 06.04.05 20:43
Просто интересно. Вроде доступный диапазон всегда был 01.01.1900 – 31.12.3000.

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 06.04.05 21:09
Уверен, что 1980, а не 1970? Если 1970, то понятно, unix-time, а вот 1980... Загляни в Язык и региональные стандарты > Региональные параметры > Настройка > Дата

Ответить

Номер ответа: 4
Автор ответа:
 Barsik



Разработчик Offline Client

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #4
Добавлено: 07.04.05 13:32
01.01.1980 00:00:01 до етого времени компов для юзеров небыло. :)

Ответить

Номер ответа: 5
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #5 Добавлено: 07.04.05 13:58
Наверное Barsik ближе всего к истине, хотя 80 не такой уж далекий год, согласен в СССР не было, а у «НИХ»???
Sharp, я посмотрел куда ты указал, но там речь идет только о годах введенных двумя цифрами, и к тому же 1931 – 2029…
Ладно, это не очень важно, я же написал, что это просто любопытство. Хотя в связи с этим у меня возник вопрос, как изменить дату создания папки?
Всем спасибо!

Ответить

Номер ответа: 6
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #6 Добавлено: 07.04.05 16:16
Позырь справку по FileTimeToDosDateTime...
The MS-DOS date format can represent only dates between 1/1/1980 and 12/31/2107; this conversion fails if the input file time is outside this range.


Так что, видать, это в целях совместимости, чтобы не удивлять старые проги :)


Что касается папок - CreateFile хавает и папки... Просто создавать их нельзя с её помощью, а открывать можно...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам