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

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

?? rlezip.cpp

?? 效率較高
?? CPP
字號:
/*
	文件打包和解包程序 by 郭 煒
	本程序用法:
	rlezip  -e dirname filename  將文件夾 dirname 中的所有內(nèi)容打包到 filename 文件里去
								  dirname 可以是相對路徑,也可以是絕對路徑

    rlezip -x filename           將文件 filename里的所有內(nèi)容解出來,放到當(dāng)前目錄下

	本程序沒有進(jìn)行壓縮
	解壓函數(shù) DeCompressDir 省略

    結(jié)果文件 結(jié)構(gòu)如下:
	每一個文件和文件夾,在結(jié)果文件中都有 一個 tagFileInfo結(jié)構(gòu)與之對應(yīng)。如果一個 tagFileInfo
	代表一個文件,那么在該 tagFileInfo后就緊跟著該文件的內(nèi)容.

	//關(guān)鍵函數(shù): FindFirstFile, FindNextFile  , _chdir, _mkdir

*/


#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <direct.h>
#include <io.h>

int g_nCurDirLayer = 0;  //當(dāng)前正在處理的文件夾所處的層次

const int ATTR_FILE = 0;
const int ATTR_DIR =  1;
const int MAX_LENGTH = 256;


FILE   * g_fpData;

int Is_Dir( char * name)
{
	FILE * fp = fopen (name , "r" );

	if ( fp == NULL )
	{
		if ( _chdir( name ) == 0 )
		{
			cout << name << "是文件夾" << endl;

			return 1; //是文件夾
		}
		else
		{
			cout << name << "兩者都不是" << endl;

			return -1; //兩者都不是
		}
	}
	else
	{
		fclose(fp);

		cout << name << "是文件" << endl;

		return 0; //是文件
	}
}


struct tagFileInfo
{
	char szFileName[256];  //文件名或文件夾名字
	int nLayer;			   //文件或文件夾所在的層次,根文件夾所處層次為0
	int nLength;		   //文件壓縮后的長度
	int nAttr;			   //為 ATTR_FILE 代表文件,為 	ATTR_FILE 代表文件夾
};

void CompressFile( char * szFile)
{
	cout << "Compressing file " << szFile << " ……" << endl;

	tagFileInfo FileInfo;
	FILE * fpSrc;
	int c;
	int i = 0;
	unsigned char cCount = 0; //重復(fù)次數(shù)
	long lOffsetFront = 0, lOffsetEnd; //偏移量
	int nTemp;

	memset( & FileInfo,0,sizeof(FileInfo));

	strcpy( FileInfo.szFileName,szFile);

	FileInfo.nLayer = g_nCurDirLayer;
	FileInfo.nAttr = ATTR_FILE;

	if ((fpSrc = fopen( szFile,"rb")) == NULL)
	{
		cout << "Error, failed to open file " << szFile << endl;
		exit(0);
	}

	FileInfo.nLength = 0;
	lOffsetFront = ftell(g_fpData);

	fwrite( & FileInfo,1,sizeof( FileInfo),g_fpData);

	if ((nTemp = fgetc(fpSrc)) == EOF) //讀取第一個字節(jié)的內(nèi)容,若為EOF則返回
	{
		fclose( fpSrc);
		return;
	}
	else
		fseek(fpSrc, 0, SEEK_SET); //定位回文件開頭

	cCount = 0;

	while(( c = fgetc( fpSrc)) != EOF)
	{
		if (nTemp == c && cCount < 255)
		{
			cCount++;
		}
		else
		{
			if (cCount > 1)
			{
				//這里(應(yīng)該)進(jìn)行標(biāo)記,就是有多個重復(fù)的東東,寫兩次來標(biāo)記它
				for (i = 0; i < 2; i++)
				{
					FileInfo.nLength++;
					fputc(nTemp, g_fpData);
				}

				FileInfo.nLength++;
				fputc(cCount, g_fpData);

			}
			else if (cCount == 1)
			{
				FileInfo.nLength++;
				fputc(nTemp, g_fpData);
			}

			nTemp = c;
			cCount = 1;
		}
	}

	if (cCount > 1)
	{
		//這里(應(yīng)該)進(jìn)行標(biāo)記,就是有多個重復(fù)的東東,寫兩次來標(biāo)記它
		for (i = 0; i < 2; i++)
		{
			FileInfo.nLength++;
			fputc(nTemp, g_fpData);
		}

		FileInfo.nLength++;
		fputc(cCount, g_fpData);
	}
	else if (cCount == 1)
	{
		FileInfo.nLength++;
		fputc(nTemp, g_fpData);

	}

	//重新寫入文件信息

	lOffsetEnd = ftell(g_fpData);

	fseek(g_fpData, lOffsetFront, SEEK_SET);
	fwrite( & FileInfo,1,sizeof( FileInfo),g_fpData);


	fseek(g_fpData, lOffsetEnd, SEEK_SET);

	fclose( fpSrc);
}

void CompressDir( char * szDir )
{
	cout << "Compressing folder " << szDir << endl;

	tagFileInfo FileInfo;
	int i,nLen;
	memset( & FileInfo,0,sizeof(FileInfo));
	nLen = strlen( szDir);

	//不需要絕對路徑, 下面4行是抽取單純的文件夾名字
	for( i = nLen; szDir[i]!= '\\' && i > 0 ;i --);

	if( szDir[i] == '\\')
	   i++;

	strcpy( FileInfo.szFileName,szDir + i);

	FileInfo.nLayer = g_nCurDirLayer;
	FileInfo.nAttr = ATTR_DIR;

	fwrite( & FileInfo,1,sizeof( FileInfo),g_fpData);


	_chdir( szDir );    //當(dāng)前路徑設(shè)為該文件夾

	WIN32_FIND_DATA stFindClientData;
	HANDLE hFindClient;

	//找到第一個文件夾即其自身 " . " ,不作處理
	hFindClient = FindFirstFile( "*.*", &stFindClientData );

	if ( hFindClient == INVALID_HANDLE_VALUE )
	{
		return ;
	}

	//找到第二個文件夾即其父文件夾 ".. " ,,不作處理
	FindNextFile( hFindClient , &stFindClientData );

	//上述做法不保險(xiǎn),可移植性差。如果在別的操作系統(tǒng)或新版Windows上首先找到的不再是 "." 和".."怎么辦?

	//循環(huán)查找其它子文件夾和文件
	while ( FindNextFile( hFindClient,& stFindClientData))
	{
		//如果是子文件夾,則遞歸調(diào)用 CompressDir 進(jìn)行打包
		if(FILE_ATTRIBUTE_DIRECTORY == 
			stFindClientData.dwFileAttributes)
		{
			g_nCurDirLayer ++; //stFindClientData.cFileName 文件夾的層次比當(dāng)前文件夾即 szDir 多1 
			CompressDir( stFindClientData.cFileName); 
			g_nCurDirLayer --; //處理完stFindClientData.cFileName 文件夾后,層次值要恢復(fù)到 szDir 的層次值
		}
		else
		{ //是文件
			g_nCurDirLayer ++;
			CompressFile( stFindClientData.cFileName);
			g_nCurDirLayer --;
		}
	}
	//關(guān)閉查找句柄
	FindClose( hFindClient);
	//返回父文件夾
	_chdir( ".." );
}

void DeCompressDir( char * szZippedFile)
{
	FILE *fpZip;
	FILE *fpUnZip;

	int i = 0;
	int nGet, nTemp;
	int nCount = 0;

	tagFileInfo FileInfo;

	if ((fpZip = fopen(szZippedFile, "rb")) == NULL)
	{
		cout << "Error, failed to open file " << szZippedFile << endl;
		exit(0);
	}

	g_nCurDirLayer = 0;

	while (fread( &FileInfo, 1, sizeof(FileInfo), fpZip) == sizeof(FileInfo))
	{
		if (FileInfo.nAttr == ATTR_DIR)
		{ //如果是文件夾
			if (g_nCurDirLayer == FileInfo.nLayer)
			{
				//創(chuàng)建文件夾
				_mkdir(FileInfo.szFileName);
				g_nCurDirLayer++;
				_chdir(FileInfo.szFileName);
			}
			else if (g_nCurDirLayer > FileInfo.nLayer)
			{ //不相等,空文件夾,退回上層
				for (i = 0; i < (g_nCurDirLayer - FileInfo.nLayer); i++)
					_chdir("..");
			
				g_nCurDirLayer = FileInfo.nLayer;
				_mkdir(FileInfo.szFileName);
				
				g_nCurDirLayer++;
				_chdir(FileInfo.szFileName);
			}
		}
		else 
		{ //如果是文件
			cout << "Decompressing file " << FileInfo.szFileName << "……" << endl;

			if (g_nCurDirLayer > FileInfo.nLayer)
			{ //不相等,空文件夾,退回上層
				for (i = 0; i < (g_nCurDirLayer - FileInfo.nLayer); i++)
					_chdir("..");
			
				g_nCurDirLayer = FileInfo.nLayer;
			}


			if ( (fpUnZip = fopen(FileInfo.szFileName, "wb")) == NULL)
			{
				cout << "Error, can not creat file " << FileInfo.szFileName << endl;
				break;
			}

			if ((nTemp = fgetc(fpZip)) == EOF) //讀取第一個字節(jié)的內(nèi)容,若為EOF則退出
			{
				fclose( fpZip);
				continue;
			}

			for (i = 0; i < FileInfo.nLength; )
			{
				nGet = fgetc(fpZip);
				i++;

				if (nGet == nTemp)
				{
					nCount = fgetc(fpZip);
					i++;

					if (i == FileInfo.nLength - 1)
						nCount--;


					for (int j = 0; j < nCount; j++)
						fputc(nTemp, fpUnZip);

					if (i < FileInfo.nLength -1)
					{
						nTemp = fgetc(fpZip);
						i++;
					}
				}
				else if (nGet != nTemp)
				{
					fputc(nTemp, fpUnZip);

					nTemp = nGet;
				}

			}

			cout << "Decompressing file " << FileInfo.szFileName << " Finished!" << endl;
			fclose(fpUnZip);
			fseek(fpZip, -1, SEEK_CUR);
		}
	}

	fclose(fpZip);
	
}



void main( int argc, char * argv[])
{
	if ( argc == 1 )
	{
		cout << "Error: No filename." << endl;
		exit(0);
	}

	if ( stricmp( argv[1],"-e") == 0 )
	{
		g_fpData = fopen( argv[argc - 1], "wb");

		if ( stricmp( argv[2], "*") == 0 )
		{ //如果是要將當(dāng)前目錄下的所有文件壓縮到一個文件里,不考慮子目錄

			WIN32_FIND_DATA stFindClientData;		
			HANDLE hFindClient;

			hFindClient = FindFirstFile( "*.*" , &stFindClientData );    
			if ( hFindClient == INVALID_HANDLE_VALUE )
			{
				return ;
			}

			FindNextFile( hFindClient , & stFindClientData );

			while ( FindNextFile( hFindClient,& stFindClientData))
			{ //以下文件不在壓縮名單之內(nèi):壓縮目標(biāo)文件、壓縮可執(zhí)行文件
				if((FILE_ATTRIBUTE_DIRECTORY ==stFindClientData.dwFileAttributes)
					|| strcmp( stFindClientData.cFileName , argv [argc-1]) == 0
					|| strcmp( stFindClientData.cFileName , "rlezip.exe") == 0 )
				{
					//不進(jìn)行操作
				}
				else
				{ //如果是其他文件則進(jìn)行壓縮
					CompressFile( stFindClientData.cFileName);
				}
			}

			FindClose( hFindClient);
		}
		else
		{ //如果是要將一個或多個文件或文件夾壓縮到一個文件里面

			int here_argc = argc - 1; //記錄要壓縮的文件或文件夾的個數(shù)
			int i;

			for (i = 2; i < here_argc; i++ )
			{
				int IsDir = Is_Dir( argv[i] );

				if (IsDir == -1) //文件或者文件夾不存在
				{
					cout << "Error: File or folder is not found." << endl;
					fclose( g_fpData );
					remove( argv[here_argc-1] );
					exit(0); //退出程序
				}
				else if (IsDir == 1)
				{
					CompressDir( argv[i] );
				}
				else if (IsDir == 0)
				{
					CompressFile( argv[i] );					
				}
			}

		}

		fclose( g_fpData);
	}
	else if ( stricmp( argv[1],"-x") ==0 )
		DeCompressDir( argv[argc - 1]);
	else
		cout << "Error!" << endl;
	
	cout << "Finished!" << endl;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色又黄又爽网站www久久| 亚洲444eee在线观看| 国产一区二区三区香蕉| 日韩精品资源二区在线| 美女一区二区久久| 精品久久国产字幕高潮| 国产精品综合久久| 中文字幕+乱码+中文字幕一区| 国产成人av资源| 中文字幕在线观看一区二区| 色久优优欧美色久优优| 婷婷综合久久一区二区三区| 欧美一区二区三区成人| 国产乱色国产精品免费视频| 国产精品蜜臀在线观看| 欧洲另类一二三四区| 首页亚洲欧美制服丝腿| 久久久99精品久久| 91麻豆福利精品推荐| 秋霞影院一区二区| 国产精品久久影院| 欧美精品v国产精品v日韩精品| 美女在线一区二区| 中文字幕av一区 二区| 欧美日韩黄视频| 国产精品乡下勾搭老头1| 亚洲另类在线一区| 日韩欧美国产一区二区在线播放 | 成人aa视频在线观看| 一区二区三区四区不卡在线| 91精品在线免费| 成人在线综合网站| 亚洲大尺度视频在线观看| 国产亚洲精久久久久久| 欧美日本在线视频| 成人av影院在线| 免费高清在线视频一区·| 成人免费一区二区三区在线观看| 欧美日韩精品一区二区天天拍小说 | 激情欧美一区二区三区在线观看| 国产日本亚洲高清| 欧美久久久久久久久| 成人av午夜影院| 久久精品久久99精品久久| 亚洲视频中文字幕| 精品噜噜噜噜久久久久久久久试看| 99久久99久久精品国产片果冻| 蜜桃视频在线一区| 一区二区三区四区在线播放| 国产日韩欧美综合在线| 日韩欧美中文字幕公布| 欧美色窝79yyyycom| 成人丝袜18视频在线观看| 久久精品av麻豆的观看方式| 亚洲小少妇裸体bbw| 国产精品久久久久桃色tv| 精品久久久久久久久久久久包黑料| 欧美日韩一区二区在线观看视频| www.日韩精品| 国产成人综合在线| 日本v片在线高清不卡在线观看| 国产精品夫妻自拍| 欧美大黄免费观看| 欧美一区二区三区四区久久| 99视频精品在线| 国产麻豆一精品一av一免费| 午夜视黄欧洲亚洲| 日本久久电影网| 国产蜜臀97一区二区三区| 欧美在线不卡视频| 欧美一区三区二区| 男人的天堂亚洲一区| 精品少妇一区二区三区 | 日本成人超碰在线观看| 国产suv一区二区三区88区| 亚洲一区视频在线| 欧美午夜寂寞影院| 欧美v亚洲v综合ⅴ国产v| 青青青伊人色综合久久| 日韩美女精品在线| 欧美成人一区二区三区| 欧美日韩高清在线| 在线视频一区二区三区| 高清成人在线观看| 国产成人8x视频一区二区| 伦理电影国产精品| 免费高清在线一区| 蜜臀久久久99精品久久久久久| 性欧美大战久久久久久久久| 亚洲精品国产第一综合99久久| 国产精品久久久久久妇女6080| 2021国产精品久久精品| 欧美性受xxxx| 欧美高清视频一二三区| 欧美视频在线播放| 欧美夫妻性生活| 欧美一区二区人人喊爽| 日韩精品一区在线观看| 欧美变态tickling挠脚心| 日韩一区二区三区观看| 精品国产污网站| 国产三级欧美三级| 国产日韩欧美精品在线| 亚洲精品va在线观看| 亚洲一二三区视频在线观看| 亚洲成人www| 石原莉奈一区二区三区在线观看| 天天综合色天天综合色h| 蜜臀av一级做a爰片久久| 国产在线国偷精品产拍免费yy| 国产在线精品一区二区三区不卡 | 91福利在线导航| 欧美伊人久久大香线蕉综合69| 97久久超碰国产精品| 在线视频综合导航| 日韩一区二区三区视频在线| 精品成人佐山爱一区二区| 中文幕一区二区三区久久蜜桃| 亚洲视频 欧洲视频| 午夜精品成人在线视频| 精品亚洲成a人在线观看| 高潮精品一区videoshd| 色综合天天在线| 欧美挠脚心视频网站| 91精品国产91久久久久久最新毛片 | 久久色中文字幕| 国产精品久久久久婷婷| 亚洲h在线观看| 国产精品99久久久久久似苏梦涵| 99久久综合国产精品| 欧美军同video69gay| 国产亚洲1区2区3区| 亚洲一区影音先锋| 美美哒免费高清在线观看视频一区二区| 国产99精品视频| 欧美日韩精品免费| 久久精品视频网| 亚洲国产日韩在线一区模特| 久久精品国产99| 欧洲一区二区三区在线| 久久老女人爱爱| 亚洲成人av一区二区| 国产一区二区三区四区在线观看| 欧美日韩国产另类一区| 国产精品人成在线观看免费| 日本少妇一区二区| 91丨porny丨蝌蚪视频| 精品国产污网站| 亚洲aaa精品| 99久久精品99国产精品| 欧美不卡在线视频| 一区二区在线观看免费视频播放| 欧美aⅴ一区二区三区视频| 一本到高清视频免费精品| 国产色综合一区| 日本午夜精品一区二区三区电影| 色综合咪咪久久| 日本一区二区在线不卡| 激情综合五月天| 在线综合视频播放| 亚洲自拍偷拍图区| 欧美亚洲动漫精品| 亚洲欧美日韩国产成人精品影院| 韩日av一区二区| 精品日韩在线观看| 日本成人超碰在线观看| 欧美揉bbbbb揉bbbbb| 综合色天天鬼久久鬼色| 国产成人啪免费观看软件| 欧美精品一二三区| 日本一不卡视频| 91精品国产综合久久精品app| 一区二区三区在线影院| 91老师国产黑色丝袜在线| 国产精品久久夜| 成人av资源网站| 国产精品大尺度| 国产乱淫av一区二区三区| 国产精品全国免费观看高清| 国产成人夜色高潮福利影视| 久久亚洲影视婷婷| 国产综合一区二区| 26uuu精品一区二区三区四区在线| 美国三级日本三级久久99| 欧美日韩成人综合在线一区二区| 中文字幕一区视频| 欧美亚洲国产一区二区三区| 一区二区高清在线| 欧美日韩国产精选| 欧美a一区二区| 精品国产一二三| 成人综合婷婷国产精品久久蜜臀 | 精品久久久影院| 激情五月激情综合网| 欧洲精品在线观看| 免费在线观看一区| 国产亚洲一区二区三区四区 | eeuss鲁片一区二区三区在线观看| 日本一区二区成人| 一本色道久久综合亚洲91|