-public :
- MacDefaultExtensionRecord()
- {
- m_ext[0] = 0 ;
- m_type = m_creator = NULL ;
- }
- MacDefaultExtensionRecord( const MacDefaultExtensionRecord& from )
- {
- strcpy( m_ext , from.m_ext ) ;
- m_type = from.m_type ;
- m_creator = from.m_creator ;
- }
- MacDefaultExtensionRecord( const char * extension , OSType type , OSType creator )
- {
- strncpy( m_ext , extension , kMacExtensionMaxLength ) ;
- m_ext[kMacExtensionMaxLength] = 0 ;
- m_type = type ;
- m_creator = creator ;
- }
- char m_ext[kMacExtensionMaxLength] ;
- OSType m_type ;
- OSType m_creator ;
-} ;
+ if (!wxFileExists(filename))
+ return wxInvalidSize;
+
+#if defined(__WXPALMOS__)
+ // TODO
+ return wxInvalidSize;
+#elif defined(__WIN32__)
+ wxFileHandle f(filename, wxFileHandle::Read);
+ if (!f.IsOk())
+ return wxInvalidSize;
+
+ DWORD lpFileSizeHigh;
+ DWORD ret = GetFileSize(f, &lpFileSizeHigh);
+ if ( ret == INVALID_FILE_SIZE && ::GetLastError() != NO_ERROR )
+ return wxInvalidSize;
+
+ return wxULongLong(lpFileSizeHigh, ret);
+#else // ! __WIN32__
+ wxStructStat st;
+#ifndef wxNEED_WX_UNISTD_H
+ if (wxStat( filename.fn_str() , &st) != 0)
+#else
+ if (wxStat( filename, &st) != 0)
+#endif
+ return wxInvalidSize;
+ return wxULongLong(st.st_size);
+#endif
+}
+
+/* static */
+wxString wxFileName::GetHumanReadableSize(const wxULongLong &bs,
+ const wxString &nullsize,
+ int precision)
+{
+ static const double KILOBYTESIZE = 1024.0;
+ static const double MEGABYTESIZE = 1024.0*KILOBYTESIZE;
+ static const double GIGABYTESIZE = 1024.0*MEGABYTESIZE;
+ static const double TERABYTESIZE = 1024.0*GIGABYTESIZE;
+
+ if (bs == 0 || bs == wxInvalidSize)
+ return nullsize;
+
+ double bytesize = bs.ToDouble();
+ if (bytesize < KILOBYTESIZE)
+ return wxString::Format(_("%s B"), bs.ToString().c_str());
+ if (bytesize < MEGABYTESIZE)
+ return wxString::Format(_("%.*f kB"), precision, bytesize/KILOBYTESIZE);
+ if (bytesize < GIGABYTESIZE)
+ return wxString::Format(_("%.*f MB"), precision, bytesize/MEGABYTESIZE);
+ if (bytesize < TERABYTESIZE)
+ return wxString::Format(_("%.*f GB"), precision, bytesize/GIGABYTESIZE);
+
+ return wxString::Format(_("%.*f TB"), precision, bytesize/TERABYTESIZE);
+}