Writing files
Before proceeding to the more complex stuff of archive unpacking, let's take a short break and take a look at how to write to a file. We use the iOStream
interface which declares only four pure virtual methods. The GetFileName()
method returns the virtual file name. The Seek()
method sets the writing position and GetFilePos()
returns it. The Write()
method takes an untyped memory buffer and writes it to the output stream:
class iOStream: public iIntrusiveCounter { public: iOStream() {}; virtual ~iOStream() {}; virtual std::string GetFileName() const = 0; virtual void Seek( const uint64 Position ) = 0; virtual uint64 GetFilePos() const = 0; virtual uint64 Write(const void* Buf, const uint64 Size) = 0; };
The only implementation of iOStream
we provide here is clMemFileWriter,
which treats an untyped memory block as an output stream. This class is used to access data in .zip
files. First, the data is unpacked, then it is wrapped using clMemRawFile
:
class clMemFileWriter...