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:
@@ -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)
|
|
||||||
|
if ( !hFile.IsOk() )
|
||||||
return 0;
|
return 0;
|
||||||
else
|
|
||||||
|
if ( !::GetFileTime(hFile, NULL, NULL, &ftLastWrite) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// sure we want to translate to local time here?
|
||||||
|
FILETIME ftLocal;
|
||||||
|
if ( !::FileTimeToLocalFileTime(&ftLastWrite, &ftLocal) )
|
||||||
{
|
{
|
||||||
if (GetFileTime(fileHandle, & creationTime, & lastAccessTime, & lastWriteTime))
|
wxLogLastError(_T("FileTimeToLocalFileTime"));
|
||||||
{
|
|
||||||
CloseHandle(fileHandle);
|
|
||||||
|
|
||||||
wxDateTime dateTime;
|
|
||||||
FILETIME ftLocal;
|
|
||||||
if ( !::FileTimeToLocalFileTime(&lastWriteTime, &ftLocal) )
|
|
||||||
{
|
|
||||||
wxLogLastError(_T("FileTimeToLocalFileTime"));
|
|
||||||
}
|
|
||||||
|
|
||||||
SYSTEMTIME st;
|
|
||||||
if ( !::FileTimeToSystemTime(&ftLocal, &st) )
|
|
||||||
{
|
|
||||||
wxLogLastError(_T("FileTimeToSystemTime"));
|
|
||||||
}
|
|
||||||
|
|
||||||
dateTime.Set(st.wDay, wxDateTime::Month(st.wMonth - 1), st.wYear,
|
|
||||||
st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
|
|
||||||
return dateTime.GetTicks();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILETIME is a counted in 100-ns since 1601-01-01, convert it to
|
||||||
|
// number of seconds since 1970-01-01
|
||||||
|
ULARGE_INTEGER uli;
|
||||||
|
uli.LowPart = ftLocal.dwLowDateTime;
|
||||||
|
uli.HighPart = ftLocal.dwHighDateTime;
|
||||||
|
|
||||||
|
ULONGLONG ull = uli.QuadPart;
|
||||||
|
ull /= wxULL(10000000); // number of 100ns intervals in 1s
|
||||||
|
ull -= wxULL(11644473600); // 1970-01-01 - 1601-01-01 in seconds
|
||||||
|
|
||||||
|
return wx_static_cast(time_t, ull);
|
||||||
#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
|
||||||
|
Reference in New Issue
Block a user