示例#1
0
/*type tells what to do.  address1,2,3 are parameters - the values 
  passed in bx,cx, and dx */
void handleinterrupt21(char type, char* address1, char* address2, char* address3)
{
	if (type==1)
		bios_printstr(address1);
	else if (type==2)
		readstring(address1);
	else if (type==3)
		readfile(address1,address2);
	else if (type==4)
		writefile(address1,address2,address3);
	else if (type==5)
		delfile(address1);
	else if (type==6)
		executeprogram(address1,address2,0);
	else if (type==7)
		terminateprogram();	
	else if (type==8)
		executeprogram(address1,address2,1);
	else if (type==9)
		kill(address1);
	else if (type==10)
		makedir(address1,address2);
	else
		bios_printstr("ERROR: Invalid interrupt 21 code\r\n\0");
}
示例#2
0
static void cb_walk_dir_empty(char *name, uint32_t flags, uint64_t len, int64_t lastWriteTime, walkdirempty_t *wdepy)
{
	char			path[_MAX_PATH];
	
	if (wdepy->fn) {
		wdepy->fn(name, flags, len, lastWriteTime, wdepy->ctx);
	}
	sprintf(path, "%s\\%s", wdepy->path, name);
	if (flags & FILE_ATTRIBUTE_DIRECTORY) {
		RemoveDirectory(appendbackslash(path));
		DWORD err = GetLastError();
	} else {
        delfile(path);
	}
	return;
}
示例#3
0
// @rootdir: 欲遍历的根目录
// @subfolders: 是否要遍历子目录. 0: 不遍历
// @deepen: 遍历, 调用fn时给的参数是, 1: 浅到深, 0: 由深到浅
// 注:
//  1.靠这种FindFirstFile方法删除目录是不行的.当检测到是目时,调用RemoveDirectory将返回总是失败(错误码:32,指示另有进行在使用)
//    FindClose后才可以,而这时close时不可能的事.要删目录改调用SHFileOperation.
BOOL walk_dir_win32(const char* rootdir, int subfolders, int deepen, fn_walk_dir fn, uint32_t *ctx, int del)
{
	char				szCurrDir[_MAX_PATH], text[_MAX_PATH];
	HANDLE				hFind;
	WIN32_FIND_DATA		finddata;
	BOOL				fOk, fRet = TRUE;
	int64_t				timestamp = 0;
		
	GetCurrentDirectory(_MAX_PATH, szCurrDir);
	SetCurrentDirectory(appendbackslash(rootdir));
	hFind = FindFirstFile("*.*", &finddata);
	fOk = (hFind != INVALID_HANDLE_VALUE);

	while (fOk) {
		timestamp = FileTimeToUnixTime(finddata.ftLastWriteTime);
		if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
			// 目录
			if ((strcmp(finddata.cFileName, ".") != 0) && (strcmp(finddata.cFileName, "..") != 0)) {
				if (deepen && fn) {
					// 由浅到深: 是先调用fn,再去在该目上递归
					if (!fn(finddata.cFileName, FILE_ATTRIBUTE_DIRECTORY, posix_mku64(finddata.nFileSizeLow, finddata.nFileSizeHigh), timestamp, ctx)) {
						fRet = FALSE;
						break;
					}
				}
				sprintf(text, "%s\\%s\\", rootdir, finddata.cFileName);
				if (subfolders) {
					SetCurrentDirectory(text);
					walk_subdir_win32(rootdir, finddata.cFileName, deepen, fn, ctx);
				}
				if (!deepen && fn) {
					// 由深到浅: 是先在该目上递归,再去调动fn
					if (!fn(finddata.cFileName, FILE_ATTRIBUTE_DIRECTORY, posix_mku64(finddata.nFileSizeLow, finddata.nFileSizeHigh), timestamp, ctx)) {
						fRet = FALSE;
						break;
					}
				}
				if (del) {
					RemoveDirectory(text);
					DWORD err = GetLastError();
				}
			}
		} else {
			// 文件
			if (fn) {
				if (!fn(finddata.cFileName, 0, posix_mku64(finddata.nFileSizeLow, finddata.nFileSizeHigh), timestamp, ctx)) {
					fRet = FALSE;
					break;
				}
			}
			if (del) {
				sprintf(text, "%s\\%s", rootdir, finddata.cFileName);
				delfile(text);
			}
		}
		fOk = FindNextFile(hFind, &finddata);
	}
	if (hFind != INVALID_HANDLE_VALUE) {
		FindClose(hFind);
	}

	SetCurrentDirectory(szCurrDir);
	return fRet;
}
示例#4
0
	bool delfile(const std::string & filepath)
	{
		return delfile(filepath.c_str());
	}