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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usortfile.cpp

?? 嵌入式系統(tǒng)的文件下載源碼。實(shí)現(xiàn)各類文件的無線下載功能
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
	{
		if ( (long)(nMoveBeginOffset - (0-nMoveOffset)) < 0 )	// 前移位置超出文件首部
		{
			free(szBlockReadBuff);
			return FALSE;
		}

		// 初始化變量,文件指針位置
		nCurrReadOffset = nMoveBeginOffset;

		// 開始移動
		while (1)
		{
			// 剩余需要移動的數(shù)據(jù)大于一塊長度
			if ( nFileBytesToMove >= (long)(RECCNT_PERBLK * m_nRecLen) )
			{
				nBlockToReadBytes = RECCNT_PERBLK * m_nRecLen;
				nFileBytesToMove -= RECCNT_PERBLK * m_nRecLen;
			}
			// 剩余需要移動的數(shù)據(jù)小于一塊但大于零 
			else if ( nFileBytesToMove > 0 )
			{
				nBlockToReadBytes = nFileBytesToMove;
				nFileBytesToMove = 0;		// 準(zhǔn)備退出條件
			}
			// 剩余需要移動數(shù)據(jù)為零
			else
			{
				bMoveRet = TRUE;
				break;
			}
			
			// 首先定位當(dāng)前讀取指針
			zfseek ( zfp, nCurrReadOffset, ZSEEK_SET );
			
			// 讀取一塊準(zhǔn)備移動的數(shù)據(jù)
			memset ( szBlockReadBuff, 0, RECCNT_PERBLK * m_nRecLen );
			nRead = zfread ( szBlockReadBuff, sizeof(char), nBlockToReadBytes, zfp );
			if(nRead != nBlockToReadBytes)
			{
				bMoveRet = FALSE;
				break;
			}
			
			// 定位準(zhǔn)備寫入數(shù)據(jù)的位置(當(dāng)前位置-(0-nMoveOffset)-nBlockToReadBytes, nMoveOffset<0)
			zfseek (zfp, 0-nBlockToReadBytes, ZSEEK_CUR);
			zfseek (zfp, 0-(0-nMoveOffset), ZSEEK_CUR);

			// 在新位置寫入已讀取數(shù)據(jù)
			nWritten = zfwrite ( szBlockReadBuff, sizeof(char), nBlockToReadBytes, zfp);
			if ( nWritten != nBlockToReadBytes )
			{
				bMoveRet = FALSE;
				break;
			}	

			// 文件指針加本次長度,為下次定位準(zhǔn)備
			nCurrReadOffset += nBlockToReadBytes;
			}
	}
	// 若位移為正(后移數(shù)據(jù))從文件尾部開始搬運(yùn)文件
	//	* * * | * * * 
	//  1 2 3   4 5 6
	//  ====>   ====> 
	else
	{
		while (1)
		{
			// 剩余需要移動的數(shù)據(jù)大于一塊長度
			if ( nFileBytesToMove >= (long)(RECCNT_PERBLK * m_nRecLen) )
			{
				nBlockToReadBytes = RECCNT_PERBLK * m_nRecLen;
				nFileBytesToMove -= RECCNT_PERBLK * m_nRecLen;
				
			}
			// 剩余需要移動的數(shù)據(jù)小于一塊但大于零
			else if ( nFileBytesToMove > 0 )
			{
				nBlockToReadBytes = nFileBytesToMove;
				nFileBytesToMove = 0;
			}
			else
			{
				bMoveRet = TRUE;
				break;
			}
			
			// 首先定位當(dāng)前讀取數(shù)據(jù)文件指針位移
			zfseek ( zfp, nMoveBeginOffset+nFileBytesToMove, ZSEEK_SET );

			// 讀取一塊準(zhǔn)備移動的數(shù)據(jù)
			memset ( szBlockReadBuff, 0, RECCNT_PERBLK*m_nRecLen );
			nRead = zfread ( szBlockReadBuff, sizeof(char), nBlockToReadBytes, zfp );
			if(nRead != nBlockToReadBytes)
			{
				bMoveRet = FALSE;
				break;
			}
			

			// 定位準(zhǔn)備寫入數(shù)據(jù)的位置(當(dāng)前位置-nBlockToReadBytes+nMoveOffset)
			zfseek (zfp, 0-nBlockToReadBytes, ZSEEK_CUR);
			zfseek (zfp, nMoveOffset, ZSEEK_CUR);

			// 在新位置寫入數(shù)據(jù)
			nWritten = zfwrite ( szBlockReadBuff, sizeof(char), nBlockToReadBytes, zfp);
			if ( nWritten != nBlockToReadBytes )
			{
				bMoveRet = FALSE;
				break;
			}
		}// end of while 1
	}// end of else if ( nMoveOffset > 0 )

/***
 *		 若文件后移,以空格補(bǔ)入移動位置的數(shù)據(jù); 若文件前移,以 '\0' 補(bǔ)入文件尾部
 ***/
/*_ENDMOVE_:*/
	if ( nMoveOffset > 0 )
	{
		zfseek (zfp, nMoveBeginOffset, ZSEEK_SET);
		memset ( szBlockReadBuff, 0x20, RECCNT_PERBLK*m_nRecLen );
		nWritten = zfwrite ( szBlockReadBuff, sizeof(char), nMoveOffset, zfp);
		if ( nWritten != (int)nMoveOffset)
			bMoveRet = FALSE;
		else
			bMoveRet = TRUE;
	}
	else
	{
		zfseek (zfp, 0 - (0-nMoveOffset), ZSEEK_END );
		memset ( szBlockReadBuff, 0x00, RECCNT_PERBLK*m_nRecLen );
		nWritten = zfwrite ( szBlockReadBuff, sizeof(char), 0-nMoveOffset, zfp );
		if ( nWritten != (int)(0-nMoveOffset) )
			bMoveRet = FALSE;
		else
			bMoveRet = TRUE;
		
		// 2002/11/20 添加,截?cái)鄤h除數(shù)據(jù)
		zfseek (zfp, 0 - (0-nMoveOffset), ZSEEK_END );
		ztruncate ( zfp->fn );
		// 2002/11/20 添加,截?cái)鄤h除數(shù)據(jù)
	}

/***
 *		釋放緩存,返回結(jié)果
 ***/
	free(szBlockReadBuff);
	szBlockReadBuff=NULL;

	return bMoveRet;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 快速排序
// 輸入?yún)?shù) : 
// 輸出參數(shù) : VOID
// 返回值   : BOOL
////////////////////////////////////////////////////////////////////////////////////////
BOOL CSortRecordFile::QuickSort (
					IN unsigned int nCompFieldOffset,	/* 排序字段在記錄中位移 */ 
					IN unsigned int nCompFieldLength,	/* 排序字段在記錄中長度 */
					IN unsigned int nStartRecordNO,		/* 本次排序起始記錄號	*/
					IN unsigned int nEndRecordNO		/* 本次排序終止記錄號	*/
					)
{
	BOOL bRet = TRUE;
	int nPivotIndex = 0;
	int nPartitionPos = 0;

	if ( nCompFieldOffset+nCompFieldLength > m_nRecLen )
		return FALSE;

	if ( nStartRecordNO > nEndRecordNO )
		return FALSE;

	nPivotIndex = _qsort_findpivot ( nStartRecordNO, nEndRecordNO);
	
	bRet = _qsort_swap ( nPivotIndex, nEndRecordNO );

	nPartitionPos = _qsort_partition ( 
						nCompFieldOffset, nCompFieldLength, 
								(int)nStartRecordNO-1, nEndRecordNO, nEndRecordNO 
						);
	
	_qsort_swap ( nPartitionPos, nEndRecordNO );

	if ( (nPartitionPos-(int)nStartRecordNO) > 1 ) 
		QuickSort (
					nCompFieldOffset, nCompFieldLength, 
						nStartRecordNO, nPartitionPos-1 );
	if ( ((int)nEndRecordNO-nPartitionPos) > 1 )
		QuickSort (
					nCompFieldOffset, nCompFieldLength, 
						nPartitionPos+1, nEndRecordNO );

	return bRet;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 
// 輸入?yún)?shù) : 
// 輸出參數(shù) : VOID
// 返回值   : int
////////////////////////////////////////////////////////////////////////////////////////
int CSortRecordFile::_qsort_findpivot ( IN unsigned int nStartRecordNO, IN unsigned int nEndRecordNO )
{
	return (( nStartRecordNO + nEndRecordNO ) /2 ) ;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 對參加快速排序的文件記錄進(jìn)行交換
// 輸入?yún)?shù) : 
// 輸出參數(shù) : VOID
// 返回值   : BOOL
////////////////////////////////////////////////////////////////////////////////////////
BOOL CSortRecordFile::_qsort_swap (
						IN unsigned int nStartRecordNO, 
						IN unsigned int nEndRecordNO 
						)
{
	BOOL bRet = TRUE;
	char *szStartBuff = NULL;
	char *szEndBuff = NULL;
	int nBytes = 0;

	// 文件未打開,返回失敗
	if ( zfp == NULL )
	{
		bRet = FALSE;
		goto __ENDSWAP__;
	}

	// 申請交換臨時(shí)空間
	szStartBuff = (char*) malloc (sizeof(char)*m_nRecLen + 1);
	if (szStartBuff == NULL)
	{
		printf ( "_qsort_swap malloc %d bytes memory fail\n", m_nRecLen );
		goto __ENDSWAP__;
	}
	memset ( szStartBuff, 0, m_nRecLen+1 );
	
	szEndBuff = (char*) malloc (sizeof(char)*m_nRecLen + 1);
	if (szEndBuff == NULL)
	{
		printf ( "_qsort_swap malloc %d bytes memory fail\n", m_nRecLen );
		goto __ENDSWAP__;
	}
	memset ( szEndBuff, 0, m_nRecLen+1 );

	// 讀取準(zhǔn)備交換的數(shù)據(jù)
	bRet = ReadRecord ( nStartRecordNO*m_nRecLen, szStartBuff, m_nRecLen, &nBytes );
	if ( bRet != TRUE || nBytes != (int)m_nRecLen )
	{
		bRet = FALSE;
		goto __ENDSWAP__;
	}

	bRet = ReadRecord ( nEndRecordNO*m_nRecLen, szEndBuff, m_nRecLen, &nBytes );
	if ( bRet != TRUE || nBytes != (int)m_nRecLen )
	{	
		bRet = FALSE;
		goto __ENDSWAP__;
	}

	// 寫入交換數(shù)據(jù) szStartBuff ==> nEndRecordNO
	bRet = WriteRecord ( nEndRecordNO*m_nRecLen, szStartBuff, m_nRecLen, &nBytes );
	if ( bRet != TRUE || nBytes != (int)m_nRecLen )
	{
		bRet = FALSE;
		goto __ENDSWAP__;
	}
	// 寫入交換數(shù)據(jù) szEndBuff ==> nStartRecordNO 
	bRet = WriteRecord ( nStartRecordNO*m_nRecLen, szEndBuff, m_nRecLen, &nBytes );
	if ( bRet != TRUE || nBytes != (int)m_nRecLen )
	{	
		bRet = FALSE;
		goto __ENDSWAP__;
	}

__ENDSWAP__:	
	MFree(szStartBuff);
	MFree(szEndBuff);
	
	return bRet;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 獲取快速排序某記錄鍵值
// 輸入?yún)?shù) : 
// 輸出參數(shù) : pKeyBuff	獲取鍵值
// 返回值   : BOOL
////////////////////////////////////////////////////////////////////////////////////////
BOOL CSortRecordFile::_qsort_getkey(
							IN unsigned int nCompFieldOffset,	/* 鍵值字段在記錄中位移 */
							IN unsigned int nCompFieldLength, 	/* 鍵值字段在記錄中長度 */
							IN unsigned int nRecordNO, 			/* 欲獲取鍵值的記錄號	*/
							OUT void *pKeyBuff 					/* 獲取的鍵值緩沖		*/
							)
{
	BOOL bRet = TRUE;
	char *szKeyBuff = NULL;
	int nBytes = 0;

	// 文件未打開或無出緩沖,返回失敗
	if ( zfp == NULL || pKeyBuff == NULL )
	{
		bRet = FALSE;
		goto __ENDGETKEY__;
	}

	// 申請交換臨時(shí)空間
	szKeyBuff = (char*) malloc (sizeof(char)*m_nRecLen + 1);
	if (szKeyBuff == NULL)
	{
		printf ( "_qsort_swap malloc %d bytes memory fail\n", m_nRecLen );
		goto __ENDGETKEY__;
	}
	memset ( szKeyBuff, 0, m_nRecLen+1 );
	
	// 讀取比較用的鍵值
	bRet = ReadRecord ( nRecordNO*m_nRecLen, szKeyBuff, m_nRecLen, &nBytes );
	if ( bRet != TRUE || nBytes != (int)m_nRecLen )
	{
		bRet = FALSE;
		MFree(szKeyBuff);
		goto __ENDGETKEY__;
	}

	// 復(fù)制讀取到的鍵值
	memset ( pKeyBuff, 0, nCompFieldLength );
	memcpy ( pKeyBuff, szKeyBuff+nCompFieldOffset, nCompFieldLength );

__ENDGETKEY__:
	MFree(szKeyBuff);
	return bRet;
}

////////////////////////////////////////////////////////////////////////////////////////
// 功能說明 : 找出快速排序本次的分界點(diǎn)
// 輸入?yún)?shù) : 
// 輸出參數(shù) : VOID
// 返回值   : int	本次分界點(diǎn)
////////////////////////////////////////////////////////////////////////////////////////
int CSortRecordFile::_qsort_partition ( 
							IN unsigned int nCompFieldOffset,	/* 比較字段在記錄中位移 */
							IN unsigned int nCompFieldLength,	/* 比較字段長度			*/
							IN unsigned int nStartRecordNO,		/* 比較的起始記錄號		*/
							IN unsigned int nEndRecordNO,		/* 比較的終止記錄號		*/
							IN unsigned int nPivotRecordNO		/* 比較的分界記錄號		*/
							)
{
	char *pKeyBuff = NULL;
	char *pPivBuff = NULL;

	pKeyBuff = (char*) malloc ( sizeof(char) * m_nRecLen + 1 );
	pPivBuff = (char*) malloc ( sizeof(char) * m_nRecLen + 1 );
	if ( pKeyBuff == NULL || pPivBuff == NULL )
	{
		nStartRecordNO = -1;
		goto __ENDPARTITION__;
	}
	
	_qsort_getkey (nCompFieldOffset, nCompFieldLength, nPivotRecordNO, pPivBuff );
	
	do 
	{
		while (1)
		{
			++nStartRecordNO;
			if(nStartRecordNO>=nPivotRecordNO)	/* nPivotRecordNO 不用參加比較 */
				break;
			_qsort_getkey (nCompFieldOffset, nCompFieldLength, nStartRecordNO, pKeyBuff );		
			if ( memcmp ( pKeyBuff, pPivBuff, nCompFieldLength ) > 0 )
				break;
		}

		while(1)
		{
			if(nEndRecordNO==0)					/* 記錄數(shù)為零不用比較 */
				break;
			--nEndRecordNO;
			_qsort_getkey (nCompFieldOffset, nCompFieldLength, nEndRecordNO, pKeyBuff );
			if ( memcmp ( pKeyBuff, pPivBuff, nCompFieldLength ) < 0 )
				break;
		}

		_qsort_swap ( nStartRecordNO, nEndRecordNO );

	}while ( nStartRecordNO < nEndRecordNO );

	_qsort_swap ( nStartRecordNO, nEndRecordNO );
	
__ENDPARTITION__:
	MFree(pPivBuff);
	MFree(pKeyBuff);

	return nStartRecordNO;
}

////////////////////////////////////////////////////////////////////////////////////////
//  [11/4/2002] end line of sortfile.cpp
////////////////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品播放一区二区| 884aa四虎影成人精品一区| 亚洲国产精品精华液2区45| 国产米奇在线777精品观看| 精品国产一区二区国模嫣然| 捆绑调教一区二区三区| 26uuu欧美日本| 国产精品亚洲人在线观看| 国产精品久久久久一区二区三区共| www.欧美亚洲| 亚洲线精品一区二区三区| 欧美日韩的一区二区| 久久爱www久久做| 国产日韩欧美激情| 91美女蜜桃在线| 日韩精品久久理论片| 精品成人一区二区三区四区| 福利一区二区在线观看| 专区另类欧美日韩| 欧美人与性动xxxx| 国产一区二区三区日韩| 亚洲免费电影在线| 欧美一级久久久久久久大片| 国产九九视频一区二区三区| 1024成人网| 制服丝袜av成人在线看| 成人激情校园春色| 亚洲一二三区在线观看| 精品三级在线观看| 91丨九色丨黑人外教| 日韩精品一区第一页| 国产欧美精品一区二区三区四区| 在线观看日韩毛片| 国产精品一级片在线观看| 亚洲一级二级三级在线免费观看| 精品日产卡一卡二卡麻豆| 91亚洲精华国产精华精华液| 日本欧美久久久久免费播放网| 国产精品无遮挡| 4438x成人网最大色成网站| 成人午夜电影久久影院| 日产国产高清一区二区三区| 最近日韩中文字幕| 久久久精品综合| 欧美猛男超大videosgay| 国产传媒欧美日韩成人| 丝袜美腿亚洲色图| 亚洲天堂免费在线观看视频| 久久伊人蜜桃av一区二区| 欧美日韩一区视频| 99久久综合精品| 国产主播一区二区| 日韩国产欧美视频| 亚洲一区精品在线| 国产精品久久久久国产精品日日| 精品区一区二区| 制服丝袜在线91| 欧美区一区二区三区| 在线观看亚洲精品| 91视视频在线观看入口直接观看www | 亚洲美女视频在线观看| 亚洲精品一区二区三区99| 欧美日韩中文一区| 在线视频一区二区免费| 97久久精品人人澡人人爽| 国产精品资源在线观看| 精一区二区三区| 五月婷婷激情综合| 午夜亚洲国产au精品一区二区| 一区二区三区精品在线| 亚洲欧美在线aaa| 日本一区二区久久| 欧美国产乱子伦| 国产精品乱码人人做人人爱| 久久精品夜色噜噜亚洲aⅴ| 精品国产一区二区精华| 久久影院午夜论| 国产亚洲欧美色| 国产精品嫩草影院com| 日本一区二区三区电影| 中文字幕欧美激情| 国产精品乱人伦一区二区| 国产精品高清亚洲| 亚洲欧美二区三区| 亚洲国产综合91精品麻豆| 亚洲一区二区在线播放相泽| 午夜精品久久久久影视| 老司机一区二区| 国产精品18久久久久久vr| 国产精品一区二区果冻传媒| jlzzjlzz欧美大全| 日本丶国产丶欧美色综合| 在线观看日韩高清av| 欧美一卡二卡在线观看| 精品国产三级电影在线观看| 国产亚洲人成网站| 亚洲欧美在线aaa| 亚洲成人av资源| 免费看欧美女人艹b| 国内一区二区视频| 99久久综合99久久综合网站| 精品视频1区2区| 日韩女优视频免费观看| 国产亚洲欧美色| 亚洲激情第一区| 日本网站在线观看一区二区三区| 久久97超碰色| 99久久婷婷国产综合精品 | 国产成人自拍网| 91麻豆国产福利精品| 欧美精品乱码久久久久久按摩 | 久久精品视频在线看| 国产精品电影一区二区| 午夜欧美大尺度福利影院在线看| 蜜臀精品久久久久久蜜臀| 国产凹凸在线观看一区二区| 色噜噜狠狠一区二区三区果冻| 91精品国产一区二区三区香蕉| 亚洲国产精品ⅴa在线观看| 亚洲亚洲精品在线观看| 国产伦精品一区二区三区免费| 91色porny在线视频| 欧美一区二区三区影视| 亚洲三级视频在线观看| 日本一区中文字幕| av电影天堂一区二区在线观看| 制服丝袜国产精品| 亚洲色图欧美激情| 久久99精品久久久久久动态图 | 午夜久久久久久电影| 国产精品一区二区你懂的| 欧美性大战久久久久久久蜜臀| 久久婷婷一区二区三区| 亚洲成av人影院| 成人av电影免费在线播放| 欧美一区二区三区视频免费| 亚洲日穴在线视频| 国产精品自产自拍| 日韩一区二区在线观看| 亚洲一区视频在线| 91在线视频免费91| 久久久精品欧美丰满| 日av在线不卡| 在线亚洲人成电影网站色www| 国产亚洲精品中文字幕| 久久爱另类一区二区小说| 91超碰这里只有精品国产| 亚洲乱码中文字幕| 成人小视频在线观看| 精品久久久久香蕉网| 亚洲电影一区二区| 色菇凉天天综合网| 国产精品不卡一区二区三区| 国产精品一区二区久久精品爱涩 | av色综合久久天堂av综合| 精品国产sm最大网站| 日韩av不卡一区二区| 欧美丝袜丝交足nylons| 亚洲欧美日韩在线不卡| 91免费版在线| 中文字幕中文字幕一区二区| 成人免费黄色大片| 亚洲国产激情av| 国产精品99久久久久久久女警| 久久免费精品国产久精品久久久久 | 欧美一区二区久久久| 天涯成人国产亚洲精品一区av| 在线国产亚洲欧美| 亚洲成人自拍网| 欧美日韩国产精品自在自线| 亚洲第一狼人社区| 91精品免费观看| 日产欧产美韩系列久久99| 日韩一区二区中文字幕| 久久精品久久99精品久久| 日韩一区二区精品在线观看| 美女视频一区二区三区| 精品粉嫩aⅴ一区二区三区四区| 麻豆极品一区二区三区| 久久亚洲精精品中文字幕早川悠里| 九色综合狠狠综合久久| 久久久综合视频| 高清不卡一区二区在线| 国产精品不卡视频| 欧美三片在线视频观看| 日韩专区中文字幕一区二区| 欧美成人一级视频| 国产成+人+日韩+欧美+亚洲| 国产精品国产三级国产aⅴ无密码| 91啦中文在线观看| 亚洲最色的网站| 91精品婷婷国产综合久久竹菊| 开心九九激情九九欧美日韩精美视频电影 | 97aⅴ精品视频一二三区| 亚洲乱码国产乱码精品精98午夜 | 欧美一级一区二区| 国产精品自在在线| 亚洲美女视频在线| 欧美夫妻性生活| 国产伦精品一区二区三区免费 |