Source code
Revision control
Copy as Markdown
Other Tools
// FileStreams.h↩
↩
#ifndef __FILE_STREAMS_H↩
#define __FILE_STREAMS_H↩
↩
#ifdef _WIN32↩
#define USE_WIN_FILE↩
#endif↩
↩
#include "../../Common/MyString.h"↩
↩
#ifdef USE_WIN_FILE↩
#include "../../Windows/FileIO.h"↩
#else↩
#include "../../Common/C_FileIO.h"↩
#endif↩
↩
#include "../../Common/MyCom.h"↩
↩
#include "../IStream.h"↩
↩
#ifdef _WIN32↩
typedef UINT_PTR My_UINT_PTR;↩
#else↩
typedef UINT My_UINT_PTR;↩
#endif↩
↩
struct IInFileStream_Callback↩
{↩
virtual HRESULT InFileStream_On_Error(My_UINT_PTR val, DWORD error) = 0;↩
virtual void InFileStream_On_Destroy(My_UINT_PTR val) = 0;↩
};↩
↩
class CInFileStream:↩
public IInStream,↩
public IStreamGetSize,↩
#ifdef USE_WIN_FILE↩
public IStreamGetProps,↩
public IStreamGetProps2,↩
#endif↩
public CMyUnknownImp↩
{↩
public:↩
#ifdef USE_WIN_FILE↩
NWindows::NFile::NIO::CInFile File;↩
↩
#ifdef SUPPORT_DEVICE_FILE↩
UInt64 VirtPos;↩
UInt64 PhyPos;↩
UInt64 BufStartPos;↩
Byte *Buf;↩
UInt32 BufSize;↩
#endif↩
↩
#else↩
NC::NFile::NIO::CInFile File;↩
#endif↩
↩
bool SupportHardLinks;↩
↩
IInFileStream_Callback *Callback;↩
My_UINT_PTR CallbackRef;↩
↩
virtual ~CInFileStream();↩
↩
CInFileStream();↩
↩
bool Open(CFSTR fileName)↩
{↩
return File.Open(fileName);↩
}↩
↩
bool OpenShared(CFSTR fileName, bool shareForWrite)↩
{↩
return File.OpenShared(fileName, shareForWrite);↩
}↩
↩
MY_QUERYINTERFACE_BEGIN2(IInStream)↩
MY_QUERYINTERFACE_ENTRY(IStreamGetSize)↩
#ifdef USE_WIN_FILE↩
MY_QUERYINTERFACE_ENTRY(IStreamGetProps)↩
MY_QUERYINTERFACE_ENTRY(IStreamGetProps2)↩
#endif↩
MY_QUERYINTERFACE_END↩
MY_ADDREF_RELEASE↩
↩
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);↩
STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);↩
↩
STDMETHOD(GetSize)(UInt64 *size);↩
#ifdef USE_WIN_FILE↩
STDMETHOD(GetProps)(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib);↩
STDMETHOD(GetProps2)(CStreamFileProps *props);↩
#endif↩
};↩
↩
class CStdInFileStream:↩
public ISequentialInStream,↩
public CMyUnknownImp↩
{↩
public:↩
MY_UNKNOWN_IMP↩
↩
virtual ~CStdInFileStream() {}↩
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);↩
};↩
↩
class COutFileStream:↩
public IOutStream,↩
public CMyUnknownImp↩
{↩
public:↩
#ifdef USE_WIN_FILE↩
NWindows::NFile::NIO::COutFile File;↩
#else↩
NC::NFile::NIO::COutFile File;↩
#endif↩
virtual ~COutFileStream() {}↩
bool Create(CFSTR fileName, bool createAlways)↩
{↩
ProcessedSize = 0;↩
return File.Create(fileName, createAlways);↩
}↩
bool Open(CFSTR fileName, DWORD creationDisposition)↩
{↩
ProcessedSize = 0;↩
return File.Open(fileName, creationDisposition);↩
}↩
↩
HRESULT Close();↩
↩
UInt64 ProcessedSize;↩
↩
#ifdef USE_WIN_FILE↩
bool SetTime(const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime)↩
{↩
return File.SetTime(cTime, aTime, mTime);↩
}↩
bool SetMTime(const FILETIME *mTime) { return File.SetMTime(mTime); }↩
#endif↩
↩
↩
MY_UNKNOWN_IMP1(IOutStream)↩
↩
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);↩
STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);↩
STDMETHOD(SetSize)(UInt64 newSize);↩
↩
HRESULT GetSize(UInt64 *size);↩
};↩
↩
class CStdOutFileStream:↩
public ISequentialOutStream,↩
public CMyUnknownImp↩
{↩
UInt64 _size;↩
public:↩
MY_UNKNOWN_IMP↩
↩
UInt64 GetSize() const { return _size; }↩
CStdOutFileStream(): _size(0) {}↩
virtual ~CStdOutFileStream() {}↩
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);↩
};↩
↩
#endif↩