Add wxFS_SEEKABLE open flag.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42488 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Michael Wetherell
2006-10-27 07:06:41 +00:00
parent 95a76b7540
commit 8c3dbc46b3
2 changed files with 19 additions and 3 deletions

View File

@@ -166,6 +166,13 @@ protected:
// kinds of files (HTPP, FTP, local, tar.gz etc..)
//--------------------------------------------------------------------------------
// Open Bit Flags
enum {
wxFS_READ = 1, // Open for reading
wxFS_WRITE = 2, // Open for writing
wxFS_SEEKABLE = 4 // Returned stream will be seekable
};
class WXDLLIMPEXP_BASE wxFileSystem : public wxObject
{
public:
@@ -187,7 +194,7 @@ public:
// It first tries to open the file in relative scope
// (based on ChangePathTo()'s value) and then as an absolute
// path.
wxFSFile* OpenFile(const wxString& location);
wxFSFile* OpenFile(const wxString& location, int flags = wxFS_READ);
// Finds first/next file that matches spec wildcard. flags can be wxDIR for restricting
// the query to directories or wxFILE for files only or 0 for either.
@@ -205,7 +212,6 @@ public:
// Removes FS handler
static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler);
// Returns true if there is a handler which can open the given location.
static bool HasHandlerForPath(const wxString& location);

View File

@@ -27,6 +27,7 @@
#include "wx/mimetype.h"
#include "wx/filename.h"
#include "wx/tokenzr.h"
#include "wx/fileback.h"
//--------------------------------------------------------------------------------
@@ -357,7 +358,7 @@ void wxFileSystem::ChangePathTo(const wxString& location, bool is_dir)
wxFSFile* wxFileSystem::OpenFile(const wxString& location)
wxFSFile* wxFileSystem::OpenFile(const wxString& location, int flags)
{
wxString loc = MakeCorrectPath(location);
unsigned i, ln;
@@ -410,6 +411,15 @@ wxFSFile* wxFileSystem::OpenFile(const wxString& location)
node = node->GetNext();
}
}
if (s && (flags & wxFS_SEEKABLE) != 0 && !s->GetStream()->IsSeekable())
{
wxBackedInputStream *stream;
stream = new wxBackedInputStream(s->DetachStream());
stream->FindLength();
s->SetStream(stream);
}
return (s);
}