龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用Windows的文件映射机制,实现大批量数据的快速存储(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
基于文件镜像的快速大容量数据存储类。该类使用Windows下的 CreateFileMapping() 函数实现,不支持其它系统。 该类中的文件镜像原理可以参考:http://www.junt

    基于文件镜像的快速大容量数据存储类。该类使用Windows下的 CreateFileMapping() 函数实现,不支持其它系统。
该类中的文件镜像原理可以参考:http://www.juntuan.net/hkbc/winbc/n/2006-04-19/14320.html
当要读取或写入的数据跨多个MapView的时候,该类会自动处理MapView的切换。
*/
class enstFileCache : public QObject
{
Q_OBJECT

public:
/*!
construct the class.
*/
enstFileCache();

/*!
destruct the class.
*/
~enstFileCache();

/*!
打开镜像文件。
@return 当打开镜像文件失败时返回false,比如磁盘空间不够。
*/
bool CreateFileCache(const QString &pFileName);

/*!
向镜像文件中追加数据。
*/
bool AppendData(T_INT8* pData, int pDataLength);

/*!
从镜像文件的指定位置读取数据。
*/
bool ReadData(T_INT64 pAddressOffset, T_INT8* pData, int pDataLength);

protected:
void DumpWindowsErrorMessage();

private:
T_INT64 mMappingViewSize;

HANDLE mFileHandle;

HANDLE mMappingHandle;

T_INT64 mWriteMappingOffset;

LPVOID mWriteBuffer;

T_INT64 mWriteBufferOffset;

T_INT64 mReadMappingOffset;

LPVOID mReadBuffer;
};

#endif //enstfilecache_h

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接