/* GetFileTime() Ricava la data/ora UTC del file (assolute, in formato GMT). Se il secondo parametro e' TRUE, converte da GMT a local time, aggiungendo o sottraendo la differenza oraria rispetto a GMT: - data/ora assolute del file (UTC=GMT): Sun, 06 Nov 1994 08:49:37 GMT (0000) - zona oraria locale: GMT +1 (+0100) bConvertToLocalTime = FALSE -> Sun, 06 Nov 1994 08:49:37 GMT bConvertToLocalTime = TRUE -> Sun, 06 Nov 1994 09:49:37 +0100 */ BOOL CBinFile::GetFileTime(CDateTime& datetime,BOOL bConvertToLocalTime/* = FALSE*/) { BOOL bGet = FALSE; if(m_hHandle!=INVALID_HANDLE_VALUE) { FILETIME gmtfiletime = {0}; FILETIME filetime = {0}; SYSTEMTIME systemtime = {0}; // ricava la data/ora UTC del file (ossia assolute, GMT) if(::GetFileTime(m_hHandle,NULL,NULL,&gmtfiletime)) { if(bConvertToLocalTime) ::FileTimeToLocalFileTime(&gmtfiletime,&filetime); // converte in locale (aggiunge o sottrae la differenza rispetto a GMT) else memcpy(&filetime,&gmtfiletime,sizeof(FILETIME)); // nessuna conversione, data/ora assolute (UTC) // converte in formato di sistema ::FileTimeToSystemTime(&filetime,&systemtime); // formatta la data/ora del file (Day, dd Mon yyyy hh:mm:ss [GMT]) datetime.SetDateFormat(bConvertToLocalTime ? GMT : GMT_SHORT); datetime.SetYear(systemtime.wYear); datetime.SetMonth(systemtime.wMonth); datetime.SetDay(systemtime.wDay); datetime.SetHour(systemtime.wHour); datetime.SetMin(systemtime.wMinute); datetime.SetSec(systemtime.wSecond); bGet = TRUE; } } return(bGet); }
/* Update() */ BOOL CUrlDatabaseService::Update( LPCSTR lpcszUrl, LPCSTR lpcszEndTime, double dlTotalTime, double dlDownloadTime, CUrlStatus::URL_STATUS nStat, UINT nID, LPCSTR lpcszReportName, CUrlTable* pHttptable ) { BOOL bInserted = FALSE; if(m_bIsValid) { // sincronizza gli accessi if(m_pUrlDatabaseTable->Lock(SYNC_5_SECS_TIMEOUT)) { strcpyn(m_szUrl,lpcszUrl,sizeof(m_szUrl)); // scorre il database per ricavare i totali double dlTotBytes = 0.0f; UINT nUrls = 0; UINT nDownloadedUrls = 0; UINT nDownloadedItems = 0; UINT nTotalPict = 0; if(pHttptable) { pHttptable->SetIndex(URL_IDX_ID); if(pHttptable->GoTop()) { do { pHttptable->ScatterMemvars(); nUrls++; if((CUrlStatus::URL_STATUS)pHttptable->GetField_Stat()==CUrlStatus::URL_STATUS_DOWNLOADED) { nDownloadedUrls++; dlTotBytes += pHttptable->GetField_Size(); } m_Url.SplitUrl(pHttptable->GetField_Url(),&m_stUrl); if(CImage::IsImageFile(m_stUrl.file) || CImage::IsImageFile(m_stUrl.cgi)) { nTotalPict++; if((CUrlStatus::URL_STATUS)pHttptable->GetField_Stat()==CUrlStatus::URL_STATUS_DOWNLOADED) nDownloadedItems++; } pHttptable->GetNext(); } while(!pHttptable->Eof()); } } CDateTime* pDate = NULL; CDateTime* pTime = NULL; CDateTime Date; CDateTime Time; CString cData = ""; BOOL bFound = FALSE; if(m_pUrlDatabaseTable->Seek(m_szUrl,URLDATABASE_IDX_URL)) { m_pUrlDatabaseTable->ScatterMemvars(); pDate = m_pUrlDatabaseTable->GetField_Date(); pTime = m_pUrlDatabaseTable->GetField_StartTime(); Date.SetYear(pDate->GetYear()); Date.SetMonth(pDate->GetMonth()); Date.SetDay(pDate->GetDay()); Time.SetHour(pTime->GetHour()); Time.SetMin(pTime->GetMin()); Time.SetSec(pTime->GetSec()); cData = m_pUrlDatabaseTable->GetField_DataTable(); m_pUrlDatabaseTable->Delete(); bFound = TRUE; } if(bFound) { m_pUrlDatabaseTable->ResetMemvars(); m_pUrlDatabaseTable->PutField_Url ( m_szUrl ); m_pUrlDatabaseTable->PutField_Date ( &Date ); m_pUrlDatabaseTable->PutField_StartTime ( &Time ); m_DateTime.ConvertTime(HHMMSS_GMT,HHMMSS,lpcszEndTime,NULL); m_pUrlDatabaseTable->PutField_EndTime ( &m_DateTime ); m_pUrlDatabaseTable->PutField_TotalTime ( dlTotalTime ); m_pUrlDatabaseTable->PutField_DownloadTime ( dlDownloadTime ); m_pUrlDatabaseTable->PutField_Downloaded ( dlTotBytes ); m_pUrlDatabaseTable->PutField_TotalUrls ( nUrls ); m_pUrlDatabaseTable->PutField_TotalPict ( nTotalPict ); m_pUrlDatabaseTable->PutField_DownloadedUrls ( nDownloadedUrls ); m_pUrlDatabaseTable->PutField_DownloadedItems( nDownloadedItems ); m_pUrlDatabaseTable->PutField_DataTable ( cData ); m_pUrlDatabaseTable->PutField_Report ( lpcszReportName ); m_pUrlDatabaseTable->PutField_Status ( (short int)nStat ); m_pUrlDatabaseTable->PutField_Id ( nID ); m_pUrlDatabaseTable->GatherMemvars(); bInserted = m_pUrlDatabaseTable->Insert(); } m_pUrlDatabaseTable->Unlock(); } } return(bInserted); }