Newsgroup: it.comp.programmare.win32
Titolo: Win32 API, questo sconosciuto.

Ho trovato la seguente funzione sull'API di Win32, che cercavo da tempo.
Solo che non so usarla. Ho fatto qualche tentativo, ma per quanto riesca a
compilarlo, non ho i risultati che speravo.
Sicuramente mi manca qualche concetto di base.
Qualcuno saprebbe fare funzionare 'sta roba qui?
The GetFileTime function retrieves the date and time that a file was
created, last accessed, and last modified.
BOOL GetFileTime(
    HANDLE hFile, // identifies the file
    LPFILETIME lpCreationTime, // address of creation time
    LPFILETIME lpLastAccessTime,// address of last access time
    LPFILETIME lpLastWriteTime  // address of last write time
   );
Parameters
hFile
Identifies the files for which to get dates and times. The file handle must
have been created with GENERIC_READ access to the file.
lpCreationTime
Points to a FILETIME structure to receive the date and time the file was
created. This parameter can be NULL if the application does not require this
information.
lpLastAccessTime
Points to a FILETIME structure to receive the date and time the file was
last accessed. The last access time includes the last time the file was
written to, read from, or, in the case of executable files, run. This
parameter can be NULL if the application does not require this information.
lpLastWriteTime
Points to a FILETIME structure to receive the date and time the file was
last written to. This parameter can be NULL if the application does not
require this information.

 Solo che non so usarla. Ho fatto qualche tentativo, ma per quanto riesca a
    [snip]
L'uso tipico della GetFileTime puo` essere, ad esempio:
HANDLE hFile = CreateFile("C:\\Pippo.txt", GENERIC_READ,
    0, 0, OPEN_EXISTING, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) {
    // emettere diagnostiche basate su GetLastError
} else {
    FILETIME ftCreation, ftLastAccess, ftLastWrite;
    if(!GetFileTime(hFile,&ftCreation,&ftLastAccess,&ftLastWrite)) {
        // errore imprevisto, diagnosticare, con GetLastError
    } else {
        // usare i dati nelle tre strutture FILETIME suddette,
        // ad es con FileTimeToSystemTime per avere i dati
        // in termini di anno/mese/giorno/ora/minuto/...
    }
    CloseHandle(hFile);
}
Hai dei problemi con questo schema d'uso...?  Quali...?
Alex

Grazie Alex, sei sempre il meglio.
Dunque...
<HANDLE
hFile=CreateFile("C:\\Pippo.txt",GENERIC_READ,0,0,OPEN_EXISTING,0,0);
elementare...
<if(hFile==INVALID_HANDLE_VALUE)
< {
<  // emettere diagnostiche basate su GetLastError
< }
concordo...
<else
< {
<  FILETIME ftCreation, ftLastAccess, ftLastWrite;
<   if(!GetFileTime(hFile,&ftCreation,&ftLastAccess,&ftLastWrite))
<  {
<         // errore imprevisto, diagnosticare, con GetLastError
<  }
ok, fin qui ti seguo...
< else
<  {
<         // usare i dati nelle tre strutture FILETIME suddette,
<         // ad es con FileTimeToSystemTime per avere i dati
<         // in termini di anno/mese/giorno/ora/minuto/...
<  }
<    CloseHandle(hFile);
}
Qui mi perdo. Un piccolo esempio ? (che vale + di 1000 parole)

 Qui mi perdo. Un piccolo esempio ? (che vale + di 1000 parole)
    SYSTEMTIME st;
    if(!FileTimeToSystemTime(&ftCreation,&st)) {
        // errore imprevistissimo, emettere diagnostiche...!!!
        // (il sistema dev'essere totalmente in banana...)
        // sollevare un'eccezione potrebbe essere meglio.
    }
    char buf[256];
    static const char* nomigiorni[] = { "domenica",
        "lunedi`", "martedi`", "mercoledi`",
        "giovedi`", "venerdi`", "sabato" };
    wsprintf(buf, "Codesto file venne creato nell'anno di grazia %d, "
        "in un bel giorno di %s", st.wYear, nomigiorni[st.wDayOfWeek]);
    ::MessageBox(0, buf, "Preziose Informazioni sulla Creazione", MB_OK);
Naturalmente, la scelta di scrivere "mercoledi`" ovvero "mercoldi`" va
qui lasciata alla delicata sensibilita` artistica del programmatore.
Alex