Resumen Cambiar la hora/fecha de un archivo (respuesta)

Hola.
Alguien pregunto como cambiar la hora del sistema. Se le dio un solucion
del todo practica, pero en mi opinion un poco arriesgada. Era cambiar la
fecha del sistema y copiar o renombrar el archivo. De esta forma si hay
una
app que crea a modifica un archivo en background no tendra la fecha
correcta.
Propongo un metodo mas engorroso pero seguro.
El codigo esta debajo de la firma.
En mi editor de mensajes no veo las tabulaciones, no se si el codigo sera
poco legible asi que mando un pequeño archivo de texto, ¿ok?

Ciao
Manuel
____________________________________
Manuel Cano & María Alvira
manu@tcp.ip.lu
manu@slipper.ip.lu
--------------------------------------------
Spanish people from Luxembourg (Europe)


Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

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

Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const GENERIC_WRITE = &H40000000
Public Const OPEN_EXISTING = 3

Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal
hObject As Long) As Long
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal
lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As
Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDispositi


on As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As
Long) As Long
Declare Function LocalFileTimeToFileTime Lib "kernel32" Alias
"LocalFileTimeToFileTime" (lpLocalFileTime As FILETIME, lpFileTime As
FILETIME) As Long
Declare Function SetFileTime Lib "kernel32" Alias "SetFileTime" (ByVal
hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME,
lpLastWriteTime As FILETIME) As Long
Declare Function SystemTimeToFileTime Lib "kernel32" Alias "SystemTimeToFile


Time" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long

Sub Main()

Call SetFileDate("c:\autoexec.bat","16/10/96 12:30 pm")

End Sub

Sub SetFileDate(sFileName As String, sDate As String)

Dim hFile As Long
Dim lResult As Long
Dim udtSysTime As SYSFILETIME
Dim udtFileTime As FILETIME
Dim udtLocalTime As FILETIME

With udtSysTime
.wYear = Year(sDate)
.wMonth = Month(sDate)
.wDay = Day(sDate)
.wDayOfWeek = WeekDay(sDate) - 1
.wHour = Hour(sDate)
.wMinute = Minute(sDate)
.wSecond = Second(sDate)
End With

lResult = SystemTimeToFileTime(udtSysTime, udtLocalTime)
lResult = LocalFileTimeToFileTime(udtLocalTime, udtFileTime)
hFile = CreateFile(sFileName, GENERIC_WRITE, FILE_SHARED_READ Or
FILE_SHARED_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
lResult = SetFileTime(hFile, ByVal 0&, ByVal 0&, udtFileTime)
Call CloseHandle(hFile)

End Sub







Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com