reimplemented wxFileModificationTime() for CE without using wxDateTime (it also should be more efficient like this)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-06-19 23:50:11 +00:00
parent ffbc1990d1
commit 41cc03ddff

View File

@@ -1599,40 +1599,38 @@ time_t WXDLLEXPORT wxFileModificationTime(const wxString& filename)
#if defined(__WXPALMOS__) #if defined(__WXPALMOS__)
return 0; return 0;
#elif defined(__WXWINCE__) #elif defined(__WXWINCE__)
FILETIME creationTime, lastAccessTime, lastWriteTime; FILETIME ftLastWrite;
HANDLE fileHandle = ::CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, AutoHANDLE hFile(::CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,
0, FILE_ATTRIBUTE_NORMAL, 0); NULL, 0, FILE_ATTRIBUTE_NORMAL, 0));
if (fileHandle == INVALID_HANDLE_VALUE)
return 0;
else
{
if (GetFileTime(fileHandle, & creationTime, & lastAccessTime, & lastWriteTime))
{
CloseHandle(fileHandle);
wxDateTime dateTime; if ( !hFile.IsOk() )
return 0;
if ( !::GetFileTime(hFile, NULL, NULL, &ftLastWrite) )
return 0;
// sure we want to translate to local time here?
FILETIME ftLocal; FILETIME ftLocal;
if ( !::FileTimeToLocalFileTime(&lastWriteTime, &ftLocal) ) if ( !::FileTimeToLocalFileTime(&ftLastWrite, &ftLocal) )
{ {
wxLogLastError(_T("FileTimeToLocalFileTime")); wxLogLastError(_T("FileTimeToLocalFileTime"));
} }
SYSTEMTIME st; // FILETIME is a counted in 100-ns since 1601-01-01, convert it to
if ( !::FileTimeToSystemTime(&ftLocal, &st) ) // number of seconds since 1970-01-01
{ ULARGE_INTEGER uli;
wxLogLastError(_T("FileTimeToSystemTime")); uli.LowPart = ftLocal.dwLowDateTime;
} uli.HighPart = ftLocal.dwHighDateTime;
dateTime.Set(st.wDay, wxDateTime::Month(st.wMonth - 1), st.wYear, ULONGLONG ull = uli.QuadPart;
st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); ull /= wxULL(10000000); // number of 100ns intervals in 1s
return dateTime.GetTicks(); ull -= wxULL(11644473600); // 1970-01-01 - 1601-01-01 in seconds
}
else return wx_static_cast(time_t, ull);
return 0;
}
#else #else
wxStructStat buf; wxStructStat buf;
wxStat( filename, &buf); if ( wxStat( filename, &buf) != 0 )
return 0;
return buf.st_mtime; return buf.st_mtime;
#endif #endif