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

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

?? fastcopy.h

?? FastCopy 利用緩沖技術加快文件拷貝
?? H
字號:
/* static char *fastcopy_id = 
	"@(#)Copyright (C) H.Shirouzu 2004-2007   fastcopy.h	Ver1.52"; */
/* ========================================================================
	Project  Name			: Fast Copy file and directory
	Create					: 2004-09-15(Wed)
	Update					: 2007-02-06(Tue)
	Copyright				: H.Shirouzu
	Reference				: 
	======================================================================== */

#include "tlib.h"
#include "resource.h"
#include "utility.h"
#include "regexp.h"

#define ALIGN_SIZE(all_size, block_size) (((all_size) + (block_size) -1) / (block_size) * (block_size))

#define MIN_SECTOR_SIZE		(512)
#define OPT_SECTOR_SIZE		(2048)
#define MAX_BUF				(1024 * 1024 * 1024)
#define MIN_BUF				(1024 * 1024)
#define BIGTRANS_ALIGN		(32 * 1024)
#define APP_MEMSIZE			(6 * 1024 * 1024)
#define PATH_LOCAL_PREFIX	L"\\\\?\\"
#define PATH_UNC_PREFIX		L"\\\\?\\UNC"
#define PATH_LOCAL_PREFIX_LEN	4
#define PATH_UNC_PREFIX_LEN		7
#define MIN_ATTR_BUF		(256 * 1024)
//#define MAX_ATTR_BUF		(128 * 1024 * 1024)
#define MIN_ATTRIDX_BUF		ALIGN_SIZE((MIN_ATTR_BUF / 4), PAGE_SIZE)
#define MAX_ATTRIDX_BUF(x)	ALIGN_SIZE(((x) / 4), PAGE_SIZE)
#define MIN_MKDIRQUEUE_BUF	(8 * 1024)
#define MAX_MKDIRQUEUE_BUF	(64 * 1024)
#define MIN_ERR_BUF			(32 * 1024)
#define MAX_ERR_BUF			(64 * 1024)
#define MAX_LIST_BUF		(128 * 1024)
#define MAX_PUTLIST_BUF		(128 * 1024 * 1024)
#define MIN_PUTLIST_BUF		(1024 * 1024)

#define FASTCOPY_MUTEX		"FastCopyMutex"
#define FASTCOPY_EVENT		"FastCopyEvent"

struct TotalTrans {
	BOOL	isPreSearch;
	int		preDirs;
	int		preFiles;
	_int64	preTrans;
	int		readDirs;
	int		readFiles;
	_int64	readTrans;
	int		writeDirs;
	int		writeFiles;
	_int64	writeTrans;
	int		deleteDirs;
	int		deleteFiles;
	_int64	deleteTrans;
	int		skipDirs;
	int		skipFiles;
	_int64	skipTrans;
	int		filterSkips;
	int		errFiles;
	int		errDirs;
	_int64	errTrans;
	int		openRetry;
};

struct TransInfo {
	TotalTrans			total;
	DWORD				tickCount;
	BOOL				isSameDrv;
	BOOL				ignoreErr;
	DWORD				autoSlow;

	VBuf				*errBuf;
	CRITICAL_SECTION	*errCs;

	VBuf				*listBuf;
	CRITICAL_SECTION	*listCs;

	WCHAR				curPath[MAX_PATH_EX];
};

struct FileStat {
	_int64		fileID;
	FILETIME	ftCreationTime;
	FILETIME	ftLastAccessTime;
	FILETIME	ftLastWriteTime;
	DWORD		nFileSizeLow;	// WIN32_FIND_DATA 偺 nFileSizeLow/High
	DWORD		nFileSizeHigh;	// 偲偼媡弴乮_int64 梡乯
	DWORD		dwFileAttributes;
	HANDLE		hFile;
	DWORD		lastError;
	int			renameCount;
	BOOL		isExists;
	int			size;
	int			minSize;		// upperName 暘傪娷傔側偄
	BYTE		*upperName;		// cFileName 廔抂+1傪巜偡
	DWORD		hashVal;		// upperName 偺 hash抣
	FileStat	*next;			// for hashTable
	BYTE		cFileName[4];	// 4 == dummy

	_int64	FileSize() { return *(_int64 *)&nFileSizeLow; }
	void	SetFileSize(_int64 file_size) { *(_int64 *)&nFileSizeLow = file_size; }
};

class StatHash {
	FileStat	**hashTbl;
	int			hashNum;
	int			HashNum(int data_num);

public:
	StatHash() {}
	int		RequireSize(int data_num) { return	sizeof(FileStat *) * HashNum(data_num); }
	BOOL	Init(FileStat **data, int _data_num, void *tbl_buf);
	FileStat *Search(void *upperName, DWORD hash_val);
};

struct DirStatTag {
	int			statNum;
	int			oldStatSize;
	FileStat	*statBuf;
	FileStat	**statIndex;
};

class FastCopy {
public:
	enum Mode { DIFFCP_MODE, SYNCCP_MODE, MOVE_MODE, DELETE_MODE };
	enum OverWrite { BY_NAME, BY_ATTR, BY_LASTEST, BY_CONTENTS, BY_ALWAYS };
	enum FsType { FSTYPE_NONE, FSTYPE_NTFS, FSTYPE_FAT, FSTYPE_NETWORK };
	enum Flags { CREATE_OPENERR_FILE=1, USE_OSCACHE_READ=2, USE_OSCACHE_WRITE=4, PRE_SEARCH=8, SAMEDIR_RENAME=0x10, SKIP_EMPTYDIR=0x20, FIX_SAMEDISK=0x40, FIX_DIFFDISK=0x80, AUTOSLOW_IOLIMIT=0x100, LISTING_ONLY=0x10000000 };

	struct Info {
		BOOL	ignoreErr;		// (I/ )
		Mode	mode;			// (I/ )
		OverWrite overWrite;	// (I/ )
		BOOL	isPhysLock;		// (I/ )
		int		flags;			// (I/ )
		int		bufSize;		// (I/ )
		int		maxOpenFiles;	// (I/ )
		int		maxTransSize;	// (I/ )
		int		maxAttrSize;	// (I/ )
		int		maxDirSize;		// (I/ )
		int		nbMinSizeNtfs;	// (I/ ) FILE_FLAG_NO_BUFFERING 偱僆乕僾儞偡傞嵟彫僼傽僀儖僒僀僘
		int		nbMinSizeFat;	// (I/ ) FILE_FLAG_NO_BUFFERING 偱僆乕僾儞偡傞嵟彫僼傽僀儖僒僀僘 (FAT梡)
		TWin	*notifyWnd;		// (I/ )
		UINT	uNotifyMsg;		// (I/ )
		int		lcid;			// (I/ )

		BOOL	isRenameMode;	// ( /O) ...乽暋惢偟傑偡乿僟僀傾儘僌僞僀僩儖梡忣曬乮巄掕乯
	};							//			 彨棃揑偵丄忣曬偑憹偊傟偽丄儊儞僶偐傜愗傝棧偟

	enum Notify { END_NOTIFY, CONFIRM_NOTIFY, RENAME_NOTIFY };
	struct Confirm {
		enum Result { CANCEL_RESULT, IGNORE_RESULT, CONTINUE_RESULT };
		const char	*message;		// (I/ )
		BOOL		allow_continue;	// (I/ )
		const void	*path;			// (I/ )
		Result		result;			// ( /O)
	};
//	struct Rename {
//		enum Result { CANCEL_RENAME, AUTO_RENAME, AUTOALL_RENAME, MANUAL_RENAME };
//		char	*message;		// (I/ )
//		void	*path;			// (I/ )
//		void	*rename;		// (I/O)
//		Result	result;			// ( /O)
//	};

	int	maxStatSize;		// max size of FileStat
	int	nbMinSize;			// struct Info 嶲徠

protected:
	enum Command { WRITE_FILE, WRITE_FILE_CONT, WRITE_ABORT, REMOVE_FILES, MKDIR, INTODIR, DELETE_FILES, RETURN_PARENT, REQ_EOF /*, READDIR*/ };
	enum PutListOpt { PL_NORMAL, PL_DIRECTORY, PL_DELETE };
	struct ReqHeader : public TListObj {	// request header
		Command		command;
		BYTE		*buf;
		int			bufSize;
		int			reqSize;
		FileStat	stat;	// 壜曄挿
	};
	struct ReqBuf {
		BYTE		*buf;
		int			bufSize;
		ReqHeader	*req;
		int			reqSize;
	};

	// 婎杮忣曬
	DriveMng	driveMng;	// Drive 忣曬
	Info		info;		// 僆僾僔儑儞巜掕摍
	StatHash	hash;
	HashVal		hashVal;
	PathArray	srcArray;
	PathArray	dstArray;
	void	*src;			// src 僷僗奿擺梡
	void	*dst;			// dst 僷僗奿擺梡
	void	*confirmDst;	// 忋彂偒妋擣挷嵏梡
	int		srcBaseLen;		// src 僷僗偺屌掕晹暘偺挿偝
	int		dstBaseLen;		// dst 僷僗偺屌掕晹暘偺挿偝
	int		srcPrefixLen;	// \\?\ or \\?\UNC\ 偺挿偝
	int		dstPrefixLen;
	BOOL	isExtendDir;
	BOOL	isMetaSrc;

	// filter
	BOOL	isFilter;
	enum	{ FILE_EXP, DIR_EXP, MAX_FTYPE_EXP };
	enum	{ INC_EXP, EXC_EXP, MAX_KIND_EXP };
	RegExp	regExp[MAX_FTYPE_EXP][MAX_KIND_EXP];

	// 僶僢僼傽
	VBuf	mainBuf;		// Read/Write 梡 buffer
	VBuf	fileStatBuf;	// src file stat 梡 buffer
	VBuf	dirStatBuf;		// src dir stat 梡 buffer
	VBuf	dstStatBuf;		// dst dir/file stat 梡 buffer
	VBuf	dstStatIdxBuf;	// dstStatBuf 撪 entry 偺 index sort 梡
	VBuf	mkdirQueueBuf;
	VBuf	errBuf;
	VBuf	listBuf;

	// 僙僋僞忣曬側偳
	int		srcSectorSize;
	int		dstSectorSize;
	int		sectorSize;
	int		maxTransSize;
	FsType	srcFsType;
	FsType	dstFsType;
	BYTE	src_root[MAX_PATH];

	TotalTrans	total;		// 僼傽僀儖僐僺乕摑寁忣曬

	DWORD	startTick;
	DWORD	suspendTick;
	DWORD	autoSlow;

	BOOL	isAbort;
	BOOL	isSuspend;
	BOOL	isSameDrv;
	BOOL	isSameVol;
	BOOL	isRename;
	BOOL	readDestStatQueue;
	BOOL	readDestStatResult;

	HANDLE	hReadThread;
	HANDLE	hWriteThread;

	class TReqList : public TList {
	public:
		TReqList(void) {}
		ReqHeader *TopObj(void) { return (ReqHeader *)TList::TopObj(); }
		ReqHeader *NextObj(ReqHeader *obj) { return (ReqHeader *)TList::NextObj(obj); }
	};

	HANDLE		hRunMutex;
	Condition	cv;

	CRITICAL_SECTION errCs;
	CRITICAL_SECTION listCs;

	TReqList	readReqList;
	TReqList	writeReqList;
	BYTE		*usedOffset;
	BYTE		*freeOffset;
	ReqHeader	*writeReq;
	_int64		nextFileID;
	_int64		errFileID;

	FileStat	**openFiles;
	int			openFilesCnt;

	static unsigned WINAPI ReadThread(void *fastCopyObj);
	static unsigned WINAPI WriteThread(void *fastCopyObj);
	static unsigned WINAPI DeleteThread(void *fastCopyObj);

	BOOL ReadThreadCore(void);
	BOOL DeleteThreadCore(void);
	BOOL WriteThreadCore(void);
	BOOL PreSearch(void);
	BOOL PreSearchProc(void *path, int prefix_len, int dir_len);
	BOOL ReadProc(int dir_len, BOOL confirm_dir=TRUE);
	BOOL IsOverWriteFile(FileStat *srcStat, FileStat *dstStat);
	int  MakeRenameName(void *new_fname, int count, void *org_fname);
	BOOL SetRenameCount(FileStat *stat);
	BOOL FilterCheck(const void *path, const void *fname, DWORD attr);
	BOOL ReadDirEntry(int dir_len, BOOL confirm_dir);
	BOOL OpenFileProc(FileStat *stat, int dir_len);
	BOOL ReadMultiFilesProc(void);
	BOOL CloseMultiFilesProc(void);
	BOOL ReadFileProc(FileStat *stat);
	BOOL DeleteProc(void *path, int dir_len);
	BOOL DeleteDirProc(void *path, int dir_len, void *fname, FileStat *stat);
	BOOL DeleteFileProc(void *path, int dir_len, void *fname, FileStat *stat);
	void ReadDestStatRequest(void);
	BOOL WaitReadDestStat(void);
	BOOL ReadDestStat(void);
	BOOL MakeHashTable(void);
	void FreeDestStat(void);
	static int SortStatFunc(const void *stat1, const void *stat2);
	BOOL ExecDirQueue(void);
	BOOL WriteProc(int dir_len);
	BOOL WriteFileProc(void);
	BOOL ChangeToWriteModeCore(void);
	BOOL ChangeToWriteMode(void);
	BOOL AllocReqBuf(int req_size, _int64 _data_size, ReqBuf *buf);
	BOOL PrepareReqBuf(int req_size, _int64 data_size, _int64 file_id, ReqBuf *buf);
	BOOL SendRequest(Command command, ReqBuf *buf=NULL, FileStat *stat=NULL);
	BOOL RecvRequest(void);
	void WriteReqDone(void);
	void SetErrFileID(_int64 file_id);

	BOOL InitSrcPath(int idx);
	BOOL InitDeletePath(int idx);
	BOOL InitDstPath(void);
	BOOL GetRootDir(const void *path, void *root_dir);
	FsType GetFsType(const void *root_dir);
	int GetSectorSize(const void *root_dir);
	BOOL IsSameDrive(const void *root1, const void *root2);
	int MakeUnlimitedPath(WCHAR *buf);
	BOOL PutList(void *path, DWORD opt);

	inline BOOL IsParentOrSelfDirs(void *name) { return *(BYTE *)name == '.' && (!strcmpV(name, DOT_V) || !strcmpV(name, DOTDOT_V)); }
	int FdatToFileStat(WIN32_FIND_DATAW *fdat, FileStat *stat, BOOL is_usehash);
	Confirm::Result ConfirmErr(const char *message, const void *path=NULL, BOOL allow_continue=TRUE);
	BOOL ConvertExternalPath(const void *path, void *buf, int buf_len, BOOL to_ansi=FALSE);

public:
	FastCopy(void);
	virtual ~FastCopy();

	BOOL RegisterInfo(const PathArray *_srcArray, const PathArray *_dstArray, Info *_info, const PathArray *_includeArray=NULL, const PathArray *_excludeArray=NULL);
	BOOL TakeExclusivePriv(void);
	BOOL Start(void);
	BOOL End(void);
	BOOL IsStarting(void) { return hReadThread || hWriteThread; }
	BOOL Suspend(void);
	BOOL Resume(void);
	void Aborting(void) { isAbort = TRUE; WriteErrLog(" Aborted by User"); }
	BOOL FastCopy::WriteErrLog(char *message, int len=-1);
	BOOL IsAborting(void) { return isAbort; }
	void SetAutoSlow(DWORD wait) { autoSlow = wait; }
	DWORD GetAutoSlow() { return autoSlow; }
	BOOL GetTransInfo(TransInfo *ti, BOOL fullInfo=TRUE);
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品资源网站| 亚洲日本电影在线| 91网站黄www| 国产激情偷乱视频一区二区三区| 国产精品国产三级国产aⅴ中文| 欧美日韩一区二区三区高清| 国产制服丝袜一区| 日韩精品国产欧美| 伊人夜夜躁av伊人久久| 国产精品私人影院| 国产日韩亚洲欧美综合| 欧美大片一区二区三区| 欧美日韩一级二级| 欧美探花视频资源| 在线免费观看日韩欧美| 成人黄色在线看| 风间由美性色一区二区三区| 国产在线乱码一区二区三区| 日韩精彩视频在线观看| 人人超碰91尤物精品国产| 午夜精品福利一区二区三区av| 亚洲男人电影天堂| 亚洲精品午夜久久久| 一区av在线播放| 亚洲一区自拍偷拍| 亚洲成年人网站在线观看| 日日夜夜精品免费视频| 免费欧美在线视频| 国产一区二区三区不卡在线观看 | 99久久精品费精品国产一区二区| 国产一区二区中文字幕| 国产99精品视频| 一本高清dvd不卡在线观看| 91官网在线观看| 欧美一级黄色大片| 国产女人18水真多18精品一级做| 成人欧美一区二区三区小说| 一区二区国产视频| 久草在线在线精品观看| 99久久综合狠狠综合久久| 在线观看www91| www成人在线观看| 亚洲视频一区二区在线| 精品综合免费视频观看| 91小视频免费看| 欧美xingq一区二区| 亚洲美女屁股眼交3| 激情欧美日韩一区二区| 色屁屁一区二区| 欧美激情在线观看视频免费| 丝袜亚洲另类丝袜在线| 成人一区二区三区在线观看| 欧美一区二区三区公司| 亚洲精品免费电影| 国产91丝袜在线播放0| 欧美一区二区三区视频| 亚洲日本护士毛茸茸| 国产麻豆精品视频| 精品日韩一区二区三区免费视频| 成人免费在线观看入口| 国产成人日日夜夜| 久久婷婷国产综合精品青草| 亚洲一区二区三区三| 成人午夜av影视| 国产精品私人影院| 国产精品一卡二卡在线观看| 日韩一区二区三区观看| 午夜精品久久久久久久蜜桃app| eeuss鲁片一区二区三区在线看| 精品入口麻豆88视频| 激情综合色综合久久| 91精品国产综合久久久久久久久久 | 欧美日韩一级二级| 亚洲午夜国产一区99re久久| 91九色最新地址| 亚洲自拍偷拍图区| 在线不卡a资源高清| 日韩福利视频导航| 日韩小视频在线观看专区| 全部av―极品视觉盛宴亚洲| 日韩欧美黄色影院| 国产一区在线不卡| 中文字幕日韩欧美一区二区三区| 成人av网站在线观看| 亚洲日本欧美天堂| 3d动漫精品啪啪一区二区竹菊| 日本亚洲一区二区| 欧美激情一区在线| 在线看日韩精品电影| 日本人妖一区二区| 日本一区二区不卡视频| 欧美亚洲高清一区| 久久国产精品第一页| 中文成人综合网| 欧美午夜片在线看| 成人综合日日夜夜| 日韩福利电影在线观看| 国产精品成人一区二区三区夜夜夜| 欧美色图在线观看| 国产美女在线精品| 亚洲一区中文日韩| 一区视频在线播放| 久久亚洲私人国产精品va媚药| av一二三不卡影片| 老司机精品视频导航| 亚洲视频一区二区在线观看| 精品国产亚洲一区二区三区在线观看| gogogo免费视频观看亚洲一| 激情综合网av| 日韩主播视频在线| 一区二区三区四区乱视频| 一区二区在线看| 欧美大片免费久久精品三p| 色婷婷综合在线| av一区二区三区| 风间由美中文字幕在线看视频国产欧美| 婷婷综合在线观看| 亚洲一线二线三线视频| 亚洲女爱视频在线| 亚洲色图欧美在线| 中文字幕免费在线观看视频一区| 欧美成人国产一区二区| 欧美一级欧美三级| 欧美高清一级片在线| 欧美精品自拍偷拍动漫精品| 欧美在线一区二区三区| 欧美午夜一区二区三区| 欧美性猛交xxxxxxxx| 在线观看欧美黄色| 欧美视频在线一区二区三区| 欧美影院一区二区三区| 欧美狂野另类xxxxoooo| 欧美福利视频导航| 欧美精品一区二区三区一线天视频 | 精品国产乱码久久| 亚洲精品在线电影| 中文字幕va一区二区三区| 国产精品久久久久久久蜜臀 | 国产精品理伦片| 亚洲国产视频一区二区| 久久99久久精品欧美| 成人黄色电影在线| 欧美自拍丝袜亚洲| 久久九九99视频| 一区二区三区四区五区视频在线观看| 亚洲电影你懂得| 国产成人8x视频一区二区 | 在线观看视频一区二区欧美日韩| 欧美日韩在线直播| 久久精品一区二区三区av| 亚洲精品大片www| 国产在线精品一区在线观看麻豆| 91网上在线视频| 国产亚洲成av人在线观看导航| 亚洲永久免费av| www.欧美色图| 欧美不卡视频一区| 丝袜诱惑亚洲看片| 欧美性videosxxxxx| 久久中文娱乐网| 青椒成人免费视频| 欧美做爰猛烈大尺度电影无法无天| 日韩女优av电影在线观看| 亚洲国产精品久久人人爱蜜臀| 国产黑丝在线一区二区三区| 日韩一区二区三区在线| 午夜视频一区在线观看| 一本色道**综合亚洲精品蜜桃冫| 国产亚洲一区二区三区四区| 日韩中文字幕av电影| 欧美性猛交xxxx黑人交| 一区二区三区日韩精品| 成人免费毛片嘿嘿连载视频| 国产亚洲欧洲997久久综合| 蜜乳av一区二区| 欧美变态tickle挠乳网站| 日本三级亚洲精品| 日韩久久精品一区| 狠狠色丁香婷婷综合| 2024国产精品| 国产成人午夜99999| 中文字幕第一区第二区| 暴力调教一区二区三区| 中文字幕一区二区三区在线播放| 成人国产视频在线观看 | 亚洲欧美偷拍另类a∨色屁股| 国产91精品免费| 亚洲精品国产a久久久久久| 精品久久国产字幕高潮| 国产一区二区在线观看视频| 国产欧美精品在线观看| 在线观看一区二区视频| 偷拍自拍另类欧美| 久久久www成人免费无遮挡大片| 国产成人免费xxxxxxxx| 一区二区三区欧美| 精品免费视频一区二区| 91在线观看美女| 九九在线精品视频| 亚洲与欧洲av电影|