六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

用CFile類讀取大文件

[摘要]隨著Windows 2000和XP的普及,現(xiàn)在的大文件越來(lái)越多,而VC6中MFC的CFile類只支持不大于4GB的文件, 原因在于CFile類中使用了32位整型來(lái)處理文件,32位數(shù)的范圍是2的32次方(4GB),超過(guò)這個(gè)范圍的文件CFile就管不了,微軟.Net中VC7的CFile類支持大于4GB...
隨著Windows 2000和XP的普及,現(xiàn)在的大文件越來(lái)越多,而VC6中MFC的CFile類只支持不大于4GB的文件, 原因在于CFile類中使用了32位整型來(lái)處理文件,32位數(shù)的范圍是2的32次方(4GB),超過(guò)這個(gè)范圍的文件CFile就管不了,微軟.Net中VC7的CFile類支持大于4GB的文件,而.Net還不普及,開(kāi)發(fā)桌面應(yīng)用VC6還是首選,所以我們可以參照VC7寫(xiě)一個(gè)CFile的繼承類CFile64,使它支持大于4GB的文件:
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,你也可以根據(jù)自己的需要重載CFile的其他函數(shù)。 


標(biāo)簽:用CFile類讀取大文件 
主站蜘蛛池模板: 日本免费黄色网址 | 网站在线观看 | 亚洲人视频在线 | 天天干天天看 | 小小bbwxxxx | 欧美亚洲国产激情一区二区 | 一级黄色在线视频 | 手机看片国产免费永久 | 日韩不卡在线 | 日本道精品一区二区三区 | 婷婷六月久久综合丁香可观看 | 欧美一区视频在线 | 日本一区二区在线免费观看 | 四虎网址在线 | 最新国产网址 | 日日噜噜噜噜人人爽亚洲精品 | 日韩美毛片 | 四虎4hu永久免费国产精品 | 野外三级国产在线观看 | 色88888久久久久久影院 | 日韩精品一区二区三区大桥未久 | 最近最新中文字幕免费的一页 | 亚洲人成网男女大片在线播放 | 人人做天天爱夜夜爽中字 | 青青爽国产手机在线观看免费 | 天天操中文字幕 | 在线欧美视频 | 日本高清免费在线观看 | 青草免费视频 | 微草影院 | 日韩高清的天堂在线观看免费 | 亚洲 日本 欧美 中文字幕001 | 热e国产| 青春久久| 欧美在线综合视频 | 欧美一区二区三区精品影视 | 日本性视频网站 | 亚洲va中文字幕无码 | 天天艹日日干 | 日韩专区亚洲精品欧美专区 | 中文字幕不卡在线高清 |