Newsgroup: it.comp.lang.visual-basic
Titolo: Cambio data a files

Ciao.
dovrei cambiare la data e l'ora ora di creazione - ultima modifica - ultimo
accesso di un file fissandole a "ciň che voglio".
sapete dirmi come si fa? eviterei l'uso di ocx, gradirei usare solo api...
grazie!

 sapete dirmi come si fa? eviterei l'uso di ocx, gradirei usare solo api...
Meno facile di quello puň sembrare. Le funzioni principali
per la lettura/modifica del file-time sono GetFileTime e
SetFileTime, alle quali va passato l'handle del file da leggere
o modificare e le 3 strutture di tipo FILETIME per i dati
relativi a creazione, accesso e modifica del file in questione.
Occorre tenere presente che, in lettura, il dato FILETIME
č relativo al GMT, ossia non tiene presente l'offset del
local time. Per adattare il file-time all'offset locale si usa la
funzione FileTimeToLocalFileTime. In scrittura la correzione
viene in genere fatta tramite la funzione SystemTimeToFileTime.
Ti faccio un esempio di lettura del file-time
(Le definizioni delle strutture, delle funzioni e delle costanti
le trovi tutte nell'Api Text Viewer)
Dim OFS As OFSTRUCT
Dim FT_CREATE As FILETIME
Dim FT_ACCESS As FILETIME
Dim FT_WRITE As FILETIME
Dim FT_BUFF As FILETIME
Dim hFile As Long
Dim lngRet As Long
   'Si ottiene l'handle del file da leggere
   hFile = OpenFile(fgtFileName, OFS, OF_READ)
   If hFile = -1 Then
     'NOP - In caso di errore la funzione ritorna -1
   Else
      'In sequenza: creazione, ultimo accesso, ultima scrittura
      lngRet = GetFileTime(hFile, FT_CREATE, FT_ACCESS, FT_WRITE)
      If lngRet = 0 Then
         'NOP - In caso di errore la funzione ritorna 0
      Else
         'Occorre convertire il file-time nel local-time
         FT_BUFF = FT_CREATE
         lngRet = FileTimeToLocalFileTime(FT_BUFF, FT_CREATE)
         FT_BUFF = FT_ACCESS
         lngRet = FileTimeToLocalFileTime(FT_BUFF, FT_ACCESS)
         FT_BUFF = FT_WRITE
         lngRet = FileTimeToLocalFileTime(FT_BUFF, FT_WRITE)
      End If
   End If
   'Clean up
   lngRet = CloseHandle(hFile)
In genere, per leggere il dato contenuto nella struttura FILETIME
la si traduce in una struttura SYSTEMTIME tramite la funzione
FileTimeToSystemTime.
Esempio di scrittura del file-time
Dim OFS As OFSTRUCT
Dim SYS_TIME As SYSTEMTIME
Dim FT_CREATE As FILETIME
Dim FT_ACCESS As FILETIME
Dim FT_WRITE As FILETIME
Dim hFile As Long
Dim lngRet As Long
   'Si ottiene l'handle del file da aprire impostando anche la
   'l'inibizione dell'accesso ad altri processi
   hFile = OpenFile(fgtFileName, OFS, _
        OF_READWRITE Or _
        OF_SHARE_DENY_READ Or _
        OF_SHARE_DENY_WRITE)
   If hFile = -1 Then
    ' NOP
   Else
      'In genere si inizializza una struttura SYSTEMTIME con i dati
      'da scrivere e poi la si traduce in una struttura FILETIME
      lngRet = SystemTimeToFileTime(SYS_TIME, FT_CREATE)
      lngRet = SystemTimeToFileTime(SYS_TIME, FT_ACCESS)
      lngRet = SystemTimeToFileTime(SYS_TIME, FT_WRITE)
      'Imposta le modifiche. E' possibile indicare 0& in uno
      'dei parametri per non modificare il dato corrispondente
      lngRet = SetFileTime(hFile, FT_CREATE, FT_ACCESS, FT_WRITE)
      If lngRet = 0 Then
      'La funzione ritorna 0 se ha esito negativo
         NumeroDiErrore = GetLastError()
      End If
   End If
   'Clean up
   lngRet = CloseHandle(hFile)