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

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

?? disk.cpp

?? C++實現(xiàn)的模擬操作系統(tǒng)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// Disk.cpp: implementation of the CDisk class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "os.h"
#include "Disk.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDisk::CDisk()
{
	if(0==file.Open("file.txt",CFile::modeReadWrite ,NULL))
	{
		file.Open("file.txt",CFile::modeCreate,NULL);		
		file.Close();
		file.Open("file.txt",CFile::modeReadWrite ,NULL);
		file.SetLength(64*128);
	}
	else
	{
		file.SeekToBegin();
		file.Read(&byinfo,sizeof(byte)*128);
		file.Read(Rootlist,sizeof(List)*8);
		byRootnum=byinfo[2];
	}
	load.RemoveAll();
}

CDisk::~CDisk()
{
	file.Close();

}

int CDisk::LtoP(byte L_address) //邏輯地址轉(zhuǎn)換成物理地址
{
	return L_address*64;
}

bool CDisk::Fdisk(int num,char name[8],int big[8])   //初始化模擬硬盤
{
	int i,all;
	all=0;
	for(i=0;i<num-1;i++){
		all+=big[i];
	}
	big[num-1]=125-all;					 //計算最后一個盤的大小
	if(num>8||big[num-1]<1)
		return FALSE;
	file.SetLength(0);					//清除文件內(nèi)容
	file.SetLength(128*64);				//設(shè)置文件的長度

	byinfo[0]=byinfo[1]=1;				//硬盤起始三個區(qū)用為系統(tǒng)管理
	byinfo[2]=num;						//存根目錄數(shù) 
	byRootnum=num;						//存根目錄數(shù)
	for(i=3;i<128;i++){					//初始化磁盤分配表
		byinfo[i]=0;
	}
	file.SeekToBegin();
	file.Write(byinfo,sizeof(byte)*128);  //初始分區(qū)表
	int add=3;
	for(i=0;i<num;i++){
		Rootlist[i].name[0]=name[i];  //磁盤名
		Rootlist[i].start=add;        //起始地址
		Rootlist[i].type=1;           //類型為根目錄
		Rootlist[i].ilength=big[i];   //磁盤大小
		add=add+big[i];        
	
	}
	file.Write(&Rootlist,sizeof(List)*byRootnum);
	load.RemoveAll();
	return TRUE;
}

bool CDisk::Seekroom(char name,int L_address[3],int big)
	                //尋找空間,在指定的盤 name 找指定的空間 big,L_address[3]為返回空閑地址
{
	if(big>3)
		return FALSE;
	int i,index=0;

	for(i=0;i<byRootnum;i++)
	{
		if(Rootlist[i].name[0]==name)  //在指定盤號的位置尋找空間
		{
			int nCount=Rootlist[i].start+Rootlist[i].ilength;
			for(int j=Rootlist[i].start;j<nCount;j++)
			{
				if(0==byinfo[j])
				{
					L_address[index]=j;
					index++;
					if(index==big)
					{
						return TRUE;
					}
				}
			}
		}
	
	}
	return FALSE;
}

bool CDisk::Find(char name[6],CString *str,CString * strError)//查找文件
{
	int nCount=load.GetSize(); //得到路徑的長度	
	if(0==nCount)              //在根目錄下
	{
		strError->Format("找不到該文件");
		return FALSE;
	}
	
	BYTE index;
	if(1==nCount)
	{
		list=Rootlist[load[0]];
		index=list.start;
	}
	else
	{
		file.Seek(LtoP(load[nCount-1]),CFile::begin);
		file.Read(&list,sizeof(List));
		index=list.start;                       //得到該目錄的開始位置		
	}
	if(2<index)
	{
		for(;byinfo[index]>2;)
		{
			file.Seek(LtoP(index),CFile::begin);
			file.Read(&list,sizeof(List));
			if(3==list.type)
			{
				if(list.name[0]==name[0]&&list.name[1]==name[1]&&list.name[2]==name[2]&&list.postfix=='e')
				{
					char ch[65]={0};
					*str="";
					byte in;
					in=list.start;
					for(;2<in&&in<=128;)
					{
						file.Seek(LtoP(in),CFile::begin);
						file.Read(ch,64);
						*str+=ch;
						in=byinfo[in];
					}
					return TRUE;
				}
			}
			
			index=byinfo[index];
			if(index>128||index<=2)
				break;
		}
	}    //
	strError->Format("不能找到該文件");
	return FALSE;
}

bool CDisk::Create(char name[3],CString * strError,char potfix) //創(chuàng)建文件.strError為傳送錯誤信息
{
	int nCount=load.GetSize(); //得到路徑的長度

	if(0==nCount)              //在根目錄下
	{
		strError->Format("在根目錄中不可建立文件");
		return FALSE;
	}
	
	BYTE index;
	if(1==nCount)   //判斷是否重名
	{
		list=Rootlist[load[0]];
		index=list.start;
	}
	else
	{
		file.Seek(LtoP(load[nCount-1]),CFile::begin);
		file.Read(&list,sizeof(List));
		index=list.start;                       //得到該目錄的開始位置		
	}
	if(2<index)
	{
		for(;byinfo[index]>2;)
		{
			file.Seek(LtoP(index),CFile::begin);
			file.Read(&list,sizeof(List));
			if(list.name[0]==name[0]&&list.name[1]==name[1]&&list.name[2]==name[2])
			{
				strError->Format("創(chuàng)建文件失敗\r\n相同的文件名");
				return FALSE;
			}

			index=byinfo[index];
			if(index>128||index<=2)
				break;
		}
	}    //

	int L_address[3];
	 index= load[0];
	if(!Seekroom(Rootlist[index].name[0],L_address))
	{
		strError->Format("沒有足夠的空間");
		return FALSE;
	}


	if(1==nCount)  //如果在第一層目錄下
	{
		list=Rootlist[load[0]];
		index=list.start;
		
	}
	else
	{
		file.Seek(LtoP(load[nCount-1]),CFile::begin);
		file.Read(&list,sizeof(List));
		index=list.start;                       //得到該目錄的開始位置
		if(0==index) //如果在空目錄中創(chuàng)建文件
		{
			index=list.start=L_address[0];
			byinfo[L_address[0]]=255;
			file.Seek(LtoP(load[nCount-1]),CFile::begin);
			file.Write(&list,sizeof(List));
		}
	}
	
	for(;byinfo[index]!=0;)
	{
		if(byinfo[index]>128)
		{
			byinfo[index]=L_address[0];   //在該文件目錄的最后添加此文件
			break;
		}
		index=byinfo[index];
	}
	if(0==byinfo[index]) //如果第一次創(chuàng)建文件
	{
		byinfo[index]=255;
	}
	
	byinfo[L_address[0]]=255; //指向他下個連接地址
	byinfo[L_address[1]]=255;                   //修改分配表

	list.ilength=0;
	list.name[0]=name[0];
	list.name[1]=name[1];
	list.name[2]=name[2];
	list.postfix=potfix;
	list.start=L_address[1];
	list.type=3;

	file.Seek(LtoP((byte)L_address[0]),CFile::begin);
	file.Write(&list,sizeof(List));
	file.SeekToBegin();
	file.Write(byinfo,sizeof(byte)*128);
	char ch[64]="";
	file.Seek(LtoP((byte)L_address[1]),CFile::begin);
	file.Write(ch,64);
	return TRUE;
}

bool CDisk::Makdir(char name[3],CString * strError) //創(chuàng)建文件夾.strError為傳送錯誤信息
{
	int nCount=load.GetSize(); //得到路徑的長度
	if(0==nCount)              //在根目錄下
	{
		strError->Format("在根目錄中不可建立文件");
		return FALSE;
	}
	BYTE index;
	if(1==nCount)   //判斷是否重名
	{
		list=Rootlist[load[0]];
		index=list.start;
	}
	else
	{
		file.Seek(LtoP(load[nCount-1]),CFile::begin);
		file.Read(&list,sizeof(List));
		index=list.start;                       //得到該目錄的開始位置		
	}
	if(2<index)
	{
		for(;byinfo[index]>2;)
		{
			file.Seek(LtoP(index),CFile::begin);
			file.Read(&list,sizeof(List));
			if(list.name[0]==name[0]&&list.name[1]==name[1]&&list.name[2]==name[2])
			{
				strError->Format("創(chuàng)建目錄失敗\r\n相同的文件名");
				return FALSE;
			}

			index=byinfo[index];
			if(index>128||index<=2)
				break;
		}
	}    //

	int L_address[3];
	index= load[0];
	if(!Seekroom(Rootlist[index].name[0],L_address,1))
	{
		strError->Format("沒有足夠的空間");
		return FALSE;
	}

	if(1==nCount)  //如果在第一層目錄下
	{
		
		list=Rootlist[load[0]];
		index=list.start;
	
	}
	else
	{
		
		file.Seek(LtoP(load[nCount-1]),CFile::begin);
		file.Read(&list,sizeof(List));
		index=list.start;                       //得到該目錄的開始位置
	}
	if(0==index) //如果在空目錄中創(chuàng)建文件 肯定不在根目錄
	{
		index=list.start=L_address[0];
		byinfo[L_address[0]]=255;
		file.Seek(LtoP(load[nCount-1]),CFile::begin);
		file.Write(&list,sizeof(List));
	}
	for(;byinfo[index]!=0;)
	{
		if(byinfo[index]>128)
		{
			byinfo[index]=L_address[0];   //在該文件目錄的最后添加此文件
			break;
		}
		index=byinfo[index];
	}
	if(0==byinfo[index]) //如果第一次創(chuàng)建文件
	{
		byinfo[index]=255;
	}
	
	byinfo[L_address[0]]=255;   //修改分配表為已用

	list.ilength=0;
	list.name[0]=name[0];
	list.name[1]=name[1];
	list.name[2]=name[2];
	list.start=0;
	list.type=2;

	file.Seek(LtoP((byte)L_address[0]),CFile::begin);
	file.Write(&list,sizeof(List));
	file.SeekToBegin();
	file.Write(byinfo,sizeof(byte)*128);
	return TRUE;
}

bool CDisk::CD(char name[3],CString * strError)        //進(jìn)入下一層目錄
{
	int nCount=load.GetSize();
	if('.'==name[0]&&'.'==name[1]&&' '==name[2])
	{
		if(0==nCount)
		{
			strError->Format("根目錄");
			return FALSE;
		}
		load.RemoveAt(nCount-1);                       //刪除最后一個
		return TRUE;
	}

	if(0==nCount)
	{
		for(int i=0;i<byRootnum;i++)
		{
			if(name[0]==Rootlist[i].name[0]&&name[1]==' '&&name[2]==' ')
			{
				load.Add(i);     //如果是進(jìn)入根目錄,則存根目錄的索引
				return TRUE;
			}
		}
		strError->Format("不能找到%c%c%c",name[0],name[1],name[2]);
		return FALSE;
	}

	byte index=load[nCount-1];
	if(1==nCount)	//如果在*盤中,進(jìn)入下一層
	{
		index=Rootlist[index].start;
	}
	else
	{
		file.Seek(LtoP(index),CFile::begin);
		file.Read(&list,sizeof(List));
		index=list.start;
	}
	while(byinfo[index]>2)
	{
		file.Seek(LtoP(index),CFile::begin);
		file.Read(&list,sizeof(List));
		if(1==list.type||2==list.type)   //如果是目錄
		{
			if(list.name[0]==name[0]&&list.name[1]==name[1]&&list.name[2]==name[2])
			{
				load.Add(index);
				return TRUE;
			}
		}
		if(128<index)  //如果沒有下一個目錄,跳出
			break;
		index=byinfo[index];
	}
	strError->Format("不能找到%c%c%c",name[0],name[1],name[2]);

	return FALSE;
}

bool CDisk::Delete(char name[6],CString * strError)   //刪除文件
{
	int nCount=load.GetSize();            //得到當(dāng)前路徑層數(shù)
	byte nextin,in;                   //下一個地址;
	if(0==nCount)
	{

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品色哟哟| 亚洲日本韩国一区| 欧美日韩日日骚| 国产91精品一区二区麻豆网站 | 中文在线一区二区| 99re视频精品| 极品少妇一区二区| 亚洲丰满少妇videoshd| 国产欧美精品在线观看| 日韩欧美激情四射| 欧美日韩国产片| 一本久道中文字幕精品亚洲嫩| 国产一区二区电影| 久久精品久久综合| 日本不卡视频在线| 天天色天天爱天天射综合| 亚洲一区二区三区四区在线| 国产精品青草综合久久久久99| 精品日韩在线观看| 日韩一区二区在线观看视频 | 成人午夜短视频| 国产91精品露脸国语对白| 国内精品免费在线观看| 蜜臀av亚洲一区中文字幕| 美女网站色91| 极品销魂美女一区二区三区| 国产精品 欧美精品| 国产成人精品三级麻豆| 风流少妇一区二区| 在线亚洲一区观看| 777欧美精品| 精品久久久久久久人人人人传媒 | 亚洲视频一区在线| 亚洲一区二区三区三| 青青青爽久久午夜综合久久午夜| 日本不卡一区二区三区| 国产成人久久精品77777最新版本| 99在线精品免费| 欧美一区2区视频在线观看| 2023国产精品视频| 亚洲一区二区三区四区中文字幕| 蜜桃av一区二区三区| 97精品超碰一区二区三区| 欧美日韩国产一二三| 欧美va在线播放| 亚洲国产综合色| 欧美激情一区在线| 欧美变态凌虐bdsm| 亚洲欧洲日韩一区二区三区| 亚洲成a人片在线不卡一二三区| 强制捆绑调教一区二区| 不卡av电影在线播放| 91精品国产色综合久久久蜜香臀| 国产精品美女久久久久av爽李琼 | 国产v综合v亚洲欧| 欧美一区二区久久| 亚洲制服丝袜一区| 99久久99久久精品国产片果冻 | 在线这里只有精品| 国产午夜精品久久久久久免费视 | 中文字幕第一区二区| 日本不卡免费在线视频| 欧美日韩国产一区二区三区地区| 欧美国产禁国产网站cc| 日韩激情一二三区| 日韩女优视频免费观看| 亚洲欧洲三级电影| 国产精品99久久久久久似苏梦涵| 日本韩国一区二区| 亚洲欧洲成人自拍| 高清久久久久久| 欧美成人精品1314www| 一区二区在线观看视频在线观看| 韩国精品免费视频| 欧美高清一级片在线观看| 精品亚洲成a人| 91精品在线麻豆| 亚洲成人tv网| 欧美在线视频日韩| 亚洲亚洲人成综合网络| 色综合中文字幕国产 | 制服视频三区第一页精品| 亚洲精品一卡二卡| 99在线热播精品免费| 国产婷婷精品av在线| 国产精品一区在线观看乱码 | 欧美日韩一区二区欧美激情| 一区二区三区精品久久久| 成人免费高清视频| 久久久久久**毛片大全| 激情国产一区二区| 国产真实乱子伦精品视频| 精品免费国产二区三区| 国产在线精品免费av| 久久青草欧美一区二区三区| 日日夜夜精品免费视频| 91精品国产品国语在线不卡| 日本午夜精品视频在线观看| 欧美一区二区在线看| 国内精品久久久久影院色| 久久久不卡网国产精品二区| 91麻豆视频网站| 激情综合色播五月| 亚洲男人的天堂网| 久久综合精品国产一区二区三区 | 国产.欧美.日韩| 亚洲一区二区三区视频在线| 国产精品天干天干在观线| 欧美一级一级性生活免费录像| 91在线云播放| 国产成人8x视频一区二区| 青青草精品视频| 午夜私人影院久久久久| 国产精品第五页| 欧美激情在线看| 欧美国产激情二区三区| 精品免费视频一区二区| 在线电影院国产精品| 欧美在线观看视频一区二区 | 中文字幕av一区二区三区高 | 亚洲成人精品影院| 亚洲乱码精品一二三四区日韩在线| 中文字幕久久午夜不卡| 欧美国产精品中文字幕| 国产精品久久久久久久久果冻传媒| 久久九九影视网| 国产精品免费久久久久| 综合色天天鬼久久鬼色| 成人免费在线视频观看| 亚洲色图20p| 五月天婷婷综合| 青青青伊人色综合久久| 久久99最新地址| k8久久久一区二区三区| 日韩久久久精品| 久久综合九色综合欧美亚洲| 久久久精品黄色| 亚洲女同一区二区| 日韩成人一级片| 国产成人av影院| k8久久久一区二区三区| 日韩欧美精品在线| 久久国产生活片100| 欧美日韩国产综合一区二区三区 | av在线播放不卡| 久久97超碰国产精品超碰| 国产91露脸合集magnet| 欧美中文字幕不卡| 国产亚洲短视频| 日韩av电影天堂| 91浏览器在线视频| ww亚洲ww在线观看国产| 亚洲第一二三四区| 成人黄色小视频| 2020国产精品自拍| 日产国产高清一区二区三区| 97久久超碰国产精品| 国产亚洲成av人在线观看导航| 亚洲成人免费视| 日本精品一区二区三区高清| 欧美激情一区在线| 麻豆精品在线观看| 欧美唯美清纯偷拍| 亚洲人成7777| 色欧美乱欧美15图片| 中文字幕在线播放不卡一区| 高清国产午夜精品久久久久久| 69精品人人人人| 蜜桃91丨九色丨蝌蚪91桃色| 欧美一级夜夜爽| 国产在线播精品第三| 精品国产第一区二区三区观看体验 | 午夜不卡av免费| 欧美日韩黄色一区二区| 婷婷国产v国产偷v亚洲高清| 欧美日韩一区二区三区在线看| 亚洲自拍偷拍av| 欧美区一区二区三区| 日韩av电影免费观看高清完整版在线观看| 在线观看日韩毛片| 日日夜夜一区二区| 亚洲三级免费观看| 欧美日韩视频在线一区二区| 日韩中文字幕1| 久久日一线二线三线suv| 国产米奇在线777精品观看| 中文字幕乱码一区二区免费| 91麻豆精品秘密| 日日摸夜夜添夜夜添国产精品| 日韩一二三四区| 成人妖精视频yjsp地址| 亚洲视频小说图片| 777午夜精品免费视频| 成人黄色免费短视频| 亚欧色一区w666天堂| 久久亚洲二区三区| 欧美三级视频在线播放| 经典三级视频一区| 亚洲成人综合视频| 18成人在线观看|