麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

使用CFile類讀取大文件

2023-06-09 12:08:01
字體:
來源:轉載
供稿:網友

由于vc6中mfc的cfile類使用32位整型數來處理文件,所以它只支持不大于4gb的文件,若超過這個范圍的文件cfile就管不了。當然,在微軟的.net中vc7的cfile類中已經支持大于4gb的文件,但我們還有必要為VC6愛好者探討一下在CFile類中支持大文件的方法。

class cfile64 : public cfile
{
public:

// attributes
ulonglong getposition();


// overridables

virtual ulonglong seek(longlong loff, uint nfrom);
virtual void setlength(ulonglong dwnewlen);
ulonglong getlength() ;

virtual void lockrange(ulonglong dwpos, ulonglong dwcount);
virtual void unlockrange(ulonglong dwpos, ulonglong dwcount);

};

#include "stdafx.h"
#include "file64.h"

////////////////////////////////////////////////////////////////////////////
// cfile64 implementation

ulonglong cfile64::seek(longlong loff, uint nfrom)
{
assert_valid(this);
assert((handle)m_hfile != invalid_handle_value);
assert(nfrom == begin || nfrom == end || nfrom == current);
assert(begin == file_begin && end == file_end && current == file_current);

large_integer lioff;

lioff.quadpart = loff;
lioff.lowpart = ::setfilepointer((handle)m_hfile, lioff.lowpart, &lioff.highpart,
(dword)nfrom);
if (lioff.lowpart == (dword)-1)
if (::getlasterror() != no_error)
cfileexception::throwoserror((long)::getlasterror(), m_strfilename);

return lioff.quadpart;

}

ulonglong cfile64::getposition()
{
assert_valid(this);
assert((handle)m_hfile != invalid_handle_value);

large_integer lipos;
lipos.quadpart = 0;
lipos.lowpart = ::setfilepointer((handle)m_hfile, lipos.lowpart, &lipos.highpart , file_current);
if (lipos.lowpart == (dword)-1)
if (::getlasterror() != no_error)
cfileexception::throwoserror((long)::getlasterror(), m_strfilename);

return lipos.quadpart;
}

void cfile64::lockrange(ulonglong dwpos, ulonglong dwcount)
{
assert_valid(this);
assert((handle)m_hfile != invalid_handle_value);

ularge_integer lipos;
ularge_integer licount;

lipos.quadpart = dwpos;
licount.quadpart = dwcount;
if (!::lockfile((handle)m_hfile, lipos.lowpart, lipos.highpart, licount.lowpart,
licount.highpart))
{
cfileexception::throwoserror((long)::getlasterror(), m_strfilename);
}
}

void cfile64::unlockrange(ulonglong dwpos, ulonglong dwcount)
{
assert_valid(this);
assert((handle)m_hfile != invalid_handle_value);

ularge_integer lipos;
ularge_integer licount;

lipos.quadpart = dwpos;
licount.quadpart = dwcount;
if (!::unlockfile((handle)m_hfile, lipos.lowpart, lipos.highpart, licount.lowpart,
licount.highpart))
{
cfileexception::throwoserror((long)::getlasterror(), m_strfilename);
}
}

void cfile64::setlength(ulonglong dwnewlen)
{
assert_valid(this);
assert((handle)m_hfile != invalid_handle_value);

seek(dwnewlen, (uint)begin);

if (!::setendoffile((handle)m_hfile))
cfileexception::throwoserror((long)::getlasterror(), m_strfilename);
}

ulonglong cfile64::getlength()
{
assert_valid(this);

ularge_integer lisize;
lisize.lowpart = ::getfilesize((handle)m_hfile, &lisize.highpart);
if (lisize.lowpart == (dword)-1)
if (::getlasterror() != no_error)
cfileexception::throwoserror((long)::getlasterror(), m_strfilename);

return lisize.quadpart;
}

/////////////////////////////////////////////////////////////////////////////

上面使用的longlong是64位整型,經過這樣修改后,在理論上可支持的最大文件為18000000000gb。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人黄视频在线观看 | 2021免费日韩视频网 | 性猛aa久久久 | 欧美亚洲国产成人 | 黄色网址进入 | 亚洲导航深夜福利涩涩屋 | 国产精品久久国产精麻豆96堂 | 日本大片在线播放 | 久青草免费视频 | 欧美成人se01短视频在线看 | 国产999在线 | 国产精品美女久久久免费 | 九九热精品在线 | 婷婷亚洲一区二区三区 | 国产一级淫片在线观看 | 激情大乳女做爰办公室韩国 | 亚洲欧美国产高清 | 大片毛片 | 亚洲综合精品 | 亚洲3atv精品一区二区三区 | 精品国产欧美一区二区 | 在线观看国产免费视频 | 一色屋任你操 | 99视频有精品视频高清 | 一级免费黄色免费片 | 污片在线观看视频 | 日韩视频不卡 | 九九久久视频 | 一本一道久久久a久久久精品91 | 91成人免费视频 | 草久免费| 国产精品久久久久一区二区 | 久久最新网址 | 成码无人av片在线观看网站 | 国产色视频一区 | 国产精品久久久乱弄 | 97色在线观看免费视频 | wwwxxx免费视频| pornoⅹxxxxhd麻豆| 欧美日韩在线视频一区 | 国产精品成人av片免费看最爱 |