#endif
#ifndef WX_PRECOMP
-#include "wx/intl.h"
-#include "wx/log.h"
-#include "wx/file.h"
+ #include "wx/dynarray.h"
+ #include "wx/intl.h"
+ #include "wx/log.h"
+ #include "wx/file.h"
+ #include "wx/utils.h"
#endif
#include "wx/filename.h"
#include "wx/tokenzr.h"
#include "wx/config.h" // for wxExpandEnvVars
-#include "wx/utils.h"
#include "wx/file.h"
#include "wx/dynlib.h"
#define MAX_PATH _MAX_PATH
#endif
+
+wxULongLong wxInvalidSize = (unsigned)-1;
+
+
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
bool wxFileName::DirExists() const
{
- return wxFileName::DirExists( GetFullPath() );
+ return wxFileName::DirExists( GetPath() );
}
bool wxFileName::DirExists( const wxString &dir )
bool wxFileName::SetCwd()
{
- return wxFileName::SetCwd( GetFullPath() );
+ return wxFileName::SetCwd( GetPath() );
}
bool wxFileName::SetCwd( const wxString &cwd )
if (dir.empty())
{
// FIXME. Create \temp dir?
- dir = wxT("\\");
+ if (DirExists(wxT("\\temp")))
+ dir = wxT("\\temp");
}
path = dir + wxT("\\") + name;
int i = 1;
bool wxFileName::Mkdir( int perm, int flags )
{
- return wxFileName::Mkdir( GetFullPath(), perm, flags );
+ return wxFileName::Mkdir(GetPath(), perm, flags);
}
bool wxFileName::Mkdir( const wxString& dir, int perm, int flags )
bool wxFileName::Rmdir()
{
- return wxFileName::Rmdir( GetFullPath() );
+ return wxFileName::Rmdir( GetPath() );
}
bool wxFileName::Rmdir( const wxString &dir )
#include <shlguid.h>
#endif
-bool wxFileName::GetShortcutTarget(const wxString& shortcutPath, wxString& targetFilename, wxString* arguments)
+bool wxFileName::GetShortcutTarget(const wxString& shortcutPath,
+ wxString& targetFilename,
+ wxString* arguments)
{
wxString path, file, ext;
wxSplitPath(shortcutPath, & path, & file, & ext);
MAX_PATH);
hres = ppf->Load(wsz, 0);
+ ppf->Release();
+
if (SUCCEEDED(hres))
{
wxChar buf[2048];
}
}
}
+
+ psl->Release();
}
- psl->Release();
return success;
}
-#endif
+
+#endif // __WIN32__ && !__WXWINCE__
// ----------------------------------------------------------------------------
#endif // wxUSE_DATETIME
+
+// ----------------------------------------------------------------------------
+// file size functions
+// ----------------------------------------------------------------------------
+
+/* static */
+wxULongLong wxFileName::GetSize(const wxString &filename)
+{
+ if (!wxFileExists(filename))
+ return wxInvalidSize;
+
+#ifdef __WIN32__
+ wxFileHandle f(filename, wxFileHandle::Read);
+ if (!f.IsOk())
+ return wxInvalidSize;
+
+ DWORD lpFileSizeHigh;
+ DWORD ret = GetFileSize(f, &lpFileSizeHigh);
+ if (ret == INVALID_FILE_SIZE)
+ return wxInvalidSize;
+
+ // compose the low-order and high-order byte sizes
+ return wxULongLong(ret | (lpFileSizeHigh << sizeof(WORD)*2));
+
+#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);
+}
+
+wxULongLong wxFileName::GetSize() const
+{
+ return GetSize(GetFullPath());
+}
+
+wxString wxFileName::GetHumanReadableSize(const wxString &failmsg, int precision) const
+{
+ return GetHumanReadableSize(GetSize(), failmsg, precision);
+}
+
+
+// ----------------------------------------------------------------------------
+// Mac-specific functions
+// ----------------------------------------------------------------------------
+
#ifdef __WXMAC__
const short kMacExtensionMaxLength = 16 ;
OSType m_creator ;
} ;
-#include "wx/dynarray.h"
WX_DECLARE_OBJARRAY(MacDefaultExtensionRecord, MacDefaultExtensionArray) ;
bool gMacDefaultExtensionsInited = false ;