亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usortfile.cpp

?? 嵌入式系統的文件下載源碼。實現各類文件的無線下載功能
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		if(BytesRead != NULL)
			*BytesRead = -1;
		goto __ENDREAD__;
	}

	// 若 nOffset 大于 0 , 則為指定位置讀取數據,否則從文件頭部讀取
	if ( nOffset >= 0 )
		zfseek (zfp, nOffset, ZSEEK_SET);
	else
	{
	//  參數錯誤也返回失敗
	// 	zfseek (zfp, 0, ZSEEK_SET ); close 2002/12/09
		bRet = FALSE;
		*BytesRead = -1;
		goto __ENDREAD__;
	}
	
	// 讀取數據
	nRead = zfread ( ReadBuff, sizeof(char), BytesToRead, zfp);
	if (nRead != (int)BytesToRead)
	{
		bRet = FALSE;
		*BytesRead = nRead;
		goto __ENDREAD__;
	}
	
	*BytesRead = nRead;

__ENDREAD__:
	return bRet;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 在排序文件中進行二分查找,并返回最后一次比對的位移
// 輸入參數 : CompBuff		比較緩沖(關鍵字)
// 輸入參數 : nRecOffset	比對(關鍵字)在記錄中的位移
// 輸入參數 : nCompBytes	比對(關鍵字)長度
// 輸出參數 : nCompResult	比對結果,-2 代表比對失敗,-1 0 1 代表小于等于大于文件位移的記錄
// 返回值   : long			最后一次的位移
////////////////////////////////////////////////////////////////////////////////////////
long CSortRecordFile::FindRecord(
								 IN const void *CompBuff,  
								 IN unsigned int nRecOffset,  
								 IN unsigned int nCompBytes,  
								 OUT int *nCompResult 
								 )
{
	char * szReadBuff = NULL ;				// 讀取報文緩存
	int nLow = 0;							// 二分查找臨時變量 low, high, mid, times.
	int nHight = 0;
	int nMid = 0;
	int nTimes = 0;
	int nRead = 0;							// 讀取字節數
	int nCmpRet = 0;						// 比較結果
	int nMaxRecCount = 0;					// 最大記錄數
	long nSearchOffset = -1L;				// 返回比較當前位移

/***
 *		準備處理查找, Result = -2 表示非法參數或準備失敗
 ***/
	if ( zfp == NULL || CompBuff == NULL || nCompResult == NULL )
	{
		if(nCompResult != NULL)
			*nCompResult = -2;
		return -1L;
	}

	if ( nRecOffset > m_nRecLen )
	{
		*nCompResult = -2;
		return -1L;
	}
	
	szReadBuff = (char*) malloc (sizeof(char) * m_nRecLen + 1 );
	if ( szReadBuff == NULL )
	{
		*nCompResult = -2;
		return -1L;
	}
	else
		memset  (szReadBuff, 0, m_nRecLen + 1);
	
/***
 *		求文件最大記錄數
 ***/
	nMaxRecCount = GetRecordCount();
	nHight = nMaxRecCount - 1;
	if ( nHight < 0)
	{
		*nCompResult = -1;
		return 0;
	}

/***
 *		在文件記錄中進行二分查找
 ***/
	nTimes = 0;
	while ( ( nTimes < (int)nMaxRecCount ) && ( nLow <= nHight ) )
	{
		nTimes ++ ;
		nMid = ( nLow + nHight ) / 2;

		memset ( szReadBuff , 0 , m_nRecLen + 1 ) ;
		zfseek ( zfp , nMid * ( m_nRecLen  ) + m_nStartOffset, ZSEEK_SET ) ;
		nRead = zfread ( szReadBuff , sizeof(char), (int)m_nRecLen , zfp ) ;
		if ( nRead != (int)m_nRecLen )	// 文件讀取失敗
		{
			*nCompResult = -2;
			nSearchOffset = -1;
			break;
		}

		/***
		 *		根據比對結果分別對返回值進行賦值
		 ***/
		nCmpRet = memcmp ( CompBuff, szReadBuff+nRecOffset, nCompBytes ) ;
		nSearchOffset = zftell(zfp) - m_nRecLen;
		if ( nCmpRet == 0 )			// CompBuff == szReadBuff+nRecOffset
		{
			*nCompResult = 0;
			break;
		}
		else if ( nCmpRet < 0 )		// CompBuff < szReadBuff+nRecOffset
		{
			*nCompResult = -1;
			nHight = nMid - 1 ;
		}
		else if ( nCmpRet > 0 )		// CompBuff > szReadBuff+nRecOffset
		{	
			*nCompResult = 1;
			nLow = nMid + 1 ;
		}
	}

/***
 *		比對結束,返回結果
 ***/
/*__ENDFIND__:*/
	if(szReadBuff != NULL)
		free(szReadBuff);
	szReadBuff = NULL ;
	
	return nSearchOffset ;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 在緩沖中模糊搜索數據
// 輸入參數 : 
// 返回值   : BOOL
////////////////////////////////////////////////////////////////////////////////////////
BOOL CSortRecordFile::BlueSearchData (
							const void *szSrcData, 
							unsigned int nSrcLen, 
							const void *szDestData, 
							unsigned int nDestLen 
							)								 
{
	BOOL bRet = 0;
	char *szSrcStr = NULL;
	char *szDestStr = NULL;

	szSrcStr = (char*) malloc ( sizeof(char)*nSrcLen + 1 );
	szDestStr = (char*) malloc ( sizeof(char)*nDestLen + 1 );

	if ( szSrcStr == NULL || szDestStr == NULL )
	{
		bRet = FALSE;
		goto _END_BLUESEARCHDATA_;
	}

	memset ( szSrcStr, 0, nSrcLen+1 );
	memset ( szDestStr, 0, nDestLen+1 );
	memcpy ( szSrcStr, szSrcData, nSrcLen );
	memcpy ( szDestStr, szDestData, nDestLen );

	if ( strstr(szSrcStr, szDestStr ) != NULL )
		bRet = TRUE;
	else
		bRet = FALSE;

_END_BLUESEARCHDATA_:
	MFree(szSrcStr);
	MFree(szDestStr);

	return bRet;
}

///////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 在排序文件中進行塊讀模糊查找,并返回查找到第一條記錄的相對位移
// 輸入參數 : CompBuff		比較緩沖
// 輸入參數 : nRecOffset	比對內容在記錄中的相對位移
// 輸入參數 : nCompBytes	比對長度
// 輸出參數 : nCompResult	比對結果,0 代表查找失敗,> 0 表示實際查找到記錄條數
// 返回值   : long			查找第一條記錄相對位移
////////////////////////////////////////////////////////////////////////////////////////
long CSortRecordFile::BlueSearchRecord (
								 IN const void *szCompBuff,  
								 IN unsigned int nRecOffset,  
								 IN unsigned int nCompBytes,  
								 OUT int *nCompResult 
								 )
{
	
	int nBlockRecCount = 0;
	int nRead = 0;
	int nRecCount = 0;
	long nOffset = 0L;
	long nFileEndOffset = 0L;
	char *szBlockReadBuff=NULL;

	// 能找到則加一,否則為 0
	nCompResult = 0;

	// 申請塊讀緩沖區, 最大4K
	if ( m_nRecLen > 4096 )
		nBlockRecCount = 1;
	else
		nBlockRecCount = 4096/m_nRecLen;

	szBlockReadBuff = (char*) malloc ( sizeof(char)*(nBlockRecCount)*(m_nRecLen) );
	if(szBlockReadBuff == NULL )
	{
		printf("內存申請失敗\n");
		return -1L;
	}
	memset ( szBlockReadBuff, 0, (nBlockRecCount)*(m_nRecLen) );
	
	if (zfp == NULL)
	{
		printf("文件未打開\n");
		return -1L;
	}

	// 從尾部往后倒查文件
	zfseek (zfp, 0, ZSEEK_END);
	nFileEndOffset = zftell(zfp);

	nOffset = -1;
	while (1)
	{
		// 文件長度及尾部位移大于一塊長度
		if ( nFileEndOffset >= nBlockRecCount * (int)m_nRecLen )
		{
			nFileEndOffset -= nBlockRecCount * m_nRecLen;
			zfseek ( zfp, nFileEndOffset, ZSEEK_SET );
		}
		else if ( nFileEndOffset > 0 )		// 剩余部分不足一塊
		{
			nFileEndOffset = -1;			// 為退出準備條件
			zfseek ( zfp, 0, ZSEEK_SET );
		}
		else
		{
			break;
		}

		memset ( szBlockReadBuff, 0, nBlockRecCount*m_nRecLen );
		nRead = zfread ( szBlockReadBuff, sizeof(char), nBlockRecCount*m_nRecLen, zfp );
		if(nRead <= 0)
			break;
		nRecCount = nRead / m_nRecLen;
		for ( int i = 0; i < nRecCount; i ++ )
		{
			if ( BlueSearchData (szCompBuff, nCompBytes, szBlockReadBuff+i*m_nRecLen+nRecOffset, nCompBytes) )
			{
				nOffset = zftell(zfp) - nRecCount*m_nRecLen + i*m_nRecLen;
				++nCompResult;
				nFileEndOffset = -1;			// 作為結束標志
				break;
			}
		}
	}

	free(szBlockReadBuff);
	szBlockReadBuff=NULL;
	zfclose(zfp);

	return nOffset;
}

								 
////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 獲取文件記錄個數(記錄長度為定長)
// 輸入參數 : VOID
// 輸出參數 : VOID
// 返回值   : int
////////////////////////////////////////////////////////////////////////////////////////
int CSortRecordFile::GetRecordCount (void)
{
	int nRecCount = 0;
	long nFileEndOffset = 0L;

	if ( zfp == NULL || (int)m_nRecLen <= 0 )
		return 0;
	else
		zfclose (zfp);

	zfp = zfopen ( m_szFileName, "r+" );
	if ( zfp == NULL )
		return 0;

	zfseek ( zfp, 0, ZSEEK_END );
	nFileEndOffset = zftell (zfp);
	nFileEndOffset -= m_nStartOffset;
	if (nFileEndOffset < 0 )
		nFileEndOffset = 0;

	nRecCount = 
		nFileEndOffset / m_nRecLen + ((nFileEndOffset % m_nRecLen) ? 1 : 0 ) ;

	return nRecCount;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 獲取排序文件總字節數
// 輸入參數 : VOID
// 輸出參數 : VOID
// 返回值   : long
////////////////////////////////////////////////////////////////////////////////////////
long CSortRecordFile::GetFileBytes (void)
{
	long nFileEndOffset = 0L;
	
	if ( zfp == NULL )
		return 0L;
	else
		zfclose (zfp);

	zfp = zfopen ( m_szFileName, "r+" );
	if ( zfp == NULL )
		return 0L;

	// 獲取文件記錄長度
	zfseek ( zfp, 0, ZSEEK_END ) ;
	nFileEndOffset = zftell(zfp);
	if ( nFileEndOffset < 0 )
		nFileEndOffset = 0;

	// 返回結果
	return nFileEndOffset;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 把文件在某偏移量后的數據向后移動某偏移量
// 輸入參數 : nMoveBeginOffset	開始偏移位置
// 輸入參數 : nMoveOffset		移動偏移位置(正代表后移,負代表前移)
// 輸出參數 : VOID
// 返回值   : BOOL
// 注意     : 本函數可以較快地移植到其他環境下使用
////////////////////////////////////////////////////////////////////////////////////////
BOOL CSortRecordFile::MoveRecordAfterOffset(
						unsigned long nMoveBeginOffset, 
						long nMoveOffset
						)
{
	int nRead = 0;						// 讀取字節
	int nWritten = 0;					// 寫入字節
	long nFileBytes = 0L;				// 總字節數
	long nFileBytesToMove = 0L;			// 文件總共需要移動的字節數
	long nBlockToReadBytes = 0L;		// 當前需要讀字節數
	long nCurrReadOffset = 0L;			// 當前文件讀取文件指針位移
	unsigned char *szBlockReadBuff = NULL;
	BOOL bMoveRet = TRUE;

/***
 *		準備移動數據
 ***/
	// 準備移動文件內容,文件未打開或參數非法返回失敗
	if ( zfp == NULL || nMoveOffset == 0 )
	{
		return FALSE;
	}

	// 申請塊讀緩沖區
	szBlockReadBuff = 
		(unsigned char*) malloc ( sizeof(char)*(RECCNT_PERBLK)*(m_nRecLen) );
	if(szBlockReadBuff == NULL )
	{
		printf  ("malloc memory fail\n");
		return FALSE;
	}

	// 求出總共需要移動的字節數
	nFileBytes = GetFileBytes ();
	if ( nFileBytes == 0 )	// 文件長度為零
	{
		free(szBlockReadBuff);
		return TRUE;
	}

	nFileBytesToMove = nFileBytes - nMoveBeginOffset;
	if ( nFileBytesToMove < 0 )	// 文件長度小于起始位置
	{
		free(szBlockReadBuff);
		return FALSE;
	}
	
/***
 *		根據 nMoveOffset 分別移動數據
 ***/
	// 若位移為負(前移數據)從當前位置開始搬運數據 
	//	* * * | * * * 
	//  1 2 3   4 5 6
	//          <==== 
	if ( nMoveOffset < 0 )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线成人免费观看| 国产做a爰片久久毛片| 石原莉奈一区二区三区在线观看| 日韩影院在线观看| 国产精品一品二品| 欧美网站一区二区| 久久99精品国产.久久久久| 国产激情视频一区二区在线观看 | 91精品欧美一区二区三区综合在| 精品国产一区二区三区av性色| 国产精品久久久久久久久快鸭| 亚洲一区二区三区激情| 国产一区福利在线| 欧美视频在线播放| 久久久欧美精品sm网站| 亚洲国产裸拍裸体视频在线观看乱了| 久久精品国产秦先生| av色综合久久天堂av综合| 51久久夜色精品国产麻豆| 亚洲欧洲性图库| 免费高清成人在线| 91久久精品国产91性色tv| 久久夜色精品一区| 亚洲v中文字幕| av亚洲精华国产精华精| 日韩欧美一区二区不卡| 亚洲老妇xxxxxx| 国产成人亚洲综合a∨婷婷图片 | 美女视频免费一区| 91久久一区二区| 国产日本亚洲高清| 日韩精品电影在线| 一本久久精品一区二区| 久久久久久久电影| 日韩综合一区二区| 色吧成人激情小说| 国产午夜一区二区三区| 老司机免费视频一区二区| 91福利国产精品| 国产精品五月天| 狠狠色丁香婷综合久久| 欧美猛男gaygay网站| 中文字幕成人在线观看| 国产在线精品国自产拍免费| 欧美日韩国产乱码电影| 中文字幕日本不卡| 国产呦萝稀缺另类资源| 日韩欧美亚洲国产精品字幕久久久 | 日韩精品电影在线| 欧洲精品在线观看| 国产精品美女一区二区三区| 国产专区欧美精品| 欧美xxxx在线观看| 日韩精品视频网站| 精品视频一区二区不卡| 一区二区三区电影在线播| 中文字幕精品三区| 久久成人羞羞网站| 日韩女优电影在线观看| 日本女人一区二区三区| 欧美亚洲另类激情小说| 亚洲蜜臀av乱码久久精品| 成人不卡免费av| 中文一区二区完整视频在线观看| 久88久久88久久久| 日韩欧美一级在线播放| 久久精品国产精品亚洲综合| 日韩一区二区精品葵司在线| 日韩va亚洲va欧美va久久| 欧美日韩电影在线| 日韩黄色片在线观看| 欧美巨大另类极品videosbest | 欧美色图第一页| 午夜亚洲国产au精品一区二区| 欧美优质美女网站| 亚洲综合色噜噜狠狠| 欧美综合一区二区| 午夜影视日本亚洲欧洲精品| 欧美日韩国产经典色站一区二区三区| 亚洲影视在线播放| 欧美疯狂性受xxxxx喷水图片| 亚洲国产一二三| 欧美日韩国产综合视频在线观看| 亚洲成人在线观看视频| 欧美日韩的一区二区| 亚洲123区在线观看| 日韩三级.com| 国产一区二区不卡| 亚洲国产精品高清| 91在线云播放| 亚洲大片免费看| 日韩免费观看2025年上映的电影 | 日韩免费性生活视频播放| 久久国产精品第一页| www欧美成人18+| 国产99精品国产| 一区二区三区四区国产精品| 欧美人伦禁忌dvd放荡欲情| 美女高潮久久久| 国产视频一区二区在线观看| 色婷婷av一区| 老司机精品视频线观看86| 日本一二三四高清不卡| 一本一道久久a久久精品| 五月天网站亚洲| 久久久久久电影| 91成人免费网站| 久久精品国产亚洲一区二区三区| 久久久国产一区二区三区四区小说| 99视频在线精品| 午夜激情久久久| 国产欧美一区二区精品性| 欧美在线色视频| 精品一区中文字幕| 亚洲色图视频免费播放| 91精品国产91久久久久久最新毛片 | 亚洲精品免费在线| 欧美tickle裸体挠脚心vk| 97久久精品人人做人人爽50路| 日韩国产一二三区| 中文字幕欧美三区| 91麻豆精品国产91久久久使用方法| 国产美女视频91| 亚洲一级在线观看| 国产欧美日韩综合精品一区二区| 在线看日本不卡| 国产麻豆视频精品| 午夜精品久久久久影视| 国产午夜精品美女毛片视频| 欧美日韩一本到| 99riav一区二区三区| 美女视频第一区二区三区免费观看网站| 国产精品欧美一区喷水| 欧美精品久久一区二区三区| 99在线视频精品| 国产综合色视频| 三级久久三级久久| 亚洲乱码中文字幕| 欧美精品一区视频| 欧美日韩成人综合| 99热在这里有精品免费| 毛片av一区二区三区| 亚洲一区二区3| 亚洲欧洲日韩在线| 久久综合999| 欧美一区二区三区免费大片| 一本到三区不卡视频| 国产999精品久久久久久| 久久精工是国产品牌吗| 亚洲午夜免费电影| 国产精品国产三级国产普通话99| 日韩免费观看高清完整版 | 欧美午夜一区二区三区| av在线不卡免费看| 国产一区二区美女诱惑| 日韩精品乱码免费| 亚洲v日本v欧美v久久精品| 亚洲欧美日韩久久| 久久精品水蜜桃av综合天堂| 日韩一区二区三区电影在线观看| 欧美色图一区二区三区| 91亚洲精品久久久蜜桃网站 | 国产精品成人免费精品自在线观看| 欧美成人一区二区三区在线观看| 在线成人午夜影院| 欧美日韩亚洲综合在线| 91福利在线免费观看| 色偷偷成人一区二区三区91| 成人精品视频网站| 国产a视频精品免费观看| 精品无人区卡一卡二卡三乱码免费卡| 日韩专区一卡二卡| 午夜精品成人在线| 五月激情六月综合| 天堂蜜桃91精品| 五月婷婷综合激情| 午夜电影久久久| 日韩国产精品久久| 蜜乳av一区二区三区| 久久9热精品视频| 国产一区二区三区久久久| 国内精品第一页| 国产精品123区| 成人美女在线观看| 成人久久久精品乱码一区二区三区| 国产成a人亚洲精品| 国产日产欧美一区| 欧美国产日韩亚洲一区| 国产精品麻豆久久久| 中文字幕一区二区三区在线不卡 | 色呦呦网站一区| 欧美性感一区二区三区| 欧美精品在线观看一区二区| 欧美高清精品3d| 日韩精品综合一本久道在线视频| 欧美mv和日韩mv的网站| 久久久久亚洲综合| 国产精品福利一区二区三区| 亚洲少妇中出一区| 婷婷久久综合九色综合伊人色|