計算機操作系統(tǒng)課程設(shè)計匯本_第1頁
計算機操作系統(tǒng)課程設(shè)計匯本_第2頁
計算機操作系統(tǒng)課程設(shè)計匯本_第3頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、計算機操作系統(tǒng)課程設(shè)計班級:計091-1學號:使用語言:C+指導教師:學院:系統(tǒng)要求1、實驗?zāi)康耐ㄟ^一個簡單多用戶文件系統(tǒng)的設(shè)計,加深理解文件系統(tǒng)的部功能及部實現(xiàn)2、實驗容為linux系統(tǒng)設(shè)計一個簡單的二級文件系統(tǒng)。要求做到以下幾點:1可以實現(xiàn)以下幾條命令至少 4條;logi n用戶登陸dir列文件目錄create創(chuàng)立文件delete刪除文件ope n翻開文件close關(guān)閉文件read讀文件write寫文件2列目錄時要列出文件名、物理地址、保護碼和文件長度;3源文件可以進展讀寫保護。1、系統(tǒng)分析1、設(shè)計思想本文件為二級文件系統(tǒng),即要實現(xiàn)對文件的增刪改查,同時又具備登陸系統(tǒng)、 注冊用戶的功能,各

2、個用戶之間的文件系統(tǒng)互不干擾。本文件系統(tǒng)采用兩級目錄,其中第一級對應(yīng)于用戶賬號,第二級對應(yīng)于用戶 下的文件。另外,為了簡便文件系統(tǒng)未考慮文件共享, 文件系統(tǒng)平安以及管道文 件與設(shè)備文件等特殊容。系統(tǒng)采用構(gòu)造體來存儲用戶、文件目錄、文件數(shù)據(jù)容:048*548*5+44*5048*5+44*50+264*200用戶區(qū)文件目錄區(qū)文件數(shù)據(jù)區(qū)每個分區(qū)都是由構(gòu)造體組成,每個個去的構(gòu)造體的個數(shù)由格式化系統(tǒng)是決定。整個系統(tǒng)的編碼構(gòu)成主要分為:11 Workspace "file1; 1 projcct|E -罰file files-口 Source Files 固 mymain.cpp =t1 my

3、sys.cpp 孟 myuserfilexpp- tj Header Files Iwl allstruct,h 司 mysys.h myuscrfilc.h _l Resource FilesAllstruct.h定義了每個分區(qū)的構(gòu)造體;Mysys.h聲明了對系統(tǒng)操作的各種方法;Myuserfile.h聲明了對文件操作的各種方法;Mymai n.cpp整個系統(tǒng)的主函數(shù),操作入口;Mysys.cpp包含了 mysys.h,實現(xiàn)了操作系統(tǒng)的各種方法;Myuserfile.cpp包含了 myuserfile.h,實現(xiàn)了操作文件的各種方法;2、主要數(shù)據(jù)構(gòu)造/用戶區(qū)構(gòu)造體/是否使用/用戶名/密碼/目錄

4、地址Allstruct.h 文件的容: struct s_userlong isuse;char n ame20;char psd20;long address;;struct s list/目錄構(gòu)造體long isuse; char n ame20;long myaddress;long poin taddress; /long isfile;long poin tsize;long n extaddress;struct s_file/是否使用/文件名字/本條目錄地址指向的文件的地址long isuse;char content256; /long n ext;/是否鎖定/目標文件的大小/

5、下條目錄的地址/文件構(gòu)造體/是否使用文件容/下個文件塊地址;系統(tǒng)執(zhí)行1、如果首次進入系統(tǒng),還沒有文件系統(tǒng),那么會提示格式化文件系統(tǒng),創(chuàng)立分區(qū),并初始化分區(qū):2、剛初始化后,沒有用戶,提示創(chuàng)立用戶:虛扭窿盤文件不存在是否生成?正在倉0建*。* 0創(chuàng)建完成!是否創(chuàng)建用戶巾“v請輸入新用戶的用戶名tyu請輸入密碼123請再次輸入密碼!123逬入存儲。° 創(chuàng)建用戶成功掃3、用戶創(chuàng)立成功后出現(xiàn)對系統(tǒng)操作的菜單4、注冊用戶功能:材輸入新用戶的用戶名:admin請輸入密碼123請再次輸入密碼:123進人存儲。* °。 創(chuàng)建用戶成功*5、用戶登錄,登錄成功后顯示當前用戶下的所有文件及其詳細

6、信息,同時顯示對文件操作的菜單:6、新注冊的用戶默認為沒有文件,選擇創(chuàng)立文件,并且每次對文件操作后顯示當前用戶的所有文件和操作菜單: miKUKMKKH*1 沌備輸入文件名字母和數(shù)字.最多均個字符兒 aa文件由多少個字符e組成? 必須1550個字符128文件是否鎖定? y鎖定/旅或其他自由俠寫賣崖|漂的文件犬小 是否鎖定物理地址w128V24407、此次新建的文件為鎖定狀態(tài),不能被刪除:魯輸入爰刪陳的文件的名字文件鎖定I不能刪除丨耳 禮賈舅 JtarKJtJCIOf 托 MtJiClCMIClOfKXJiJCJfJCKaOEMtXltlCJtarKItJilOfXKKXHIOOfKJtKKJf

7、XlCXXXJtKlCiCKaiiKltJCJOli 當前目錄下的文件:文件名大小 是否鎖定物理地址aa128¥24488、對文件查看,默認創(chuàng)立的時候用 0填充文件容:磊i入要查看的文件的名字 £僅限當前目錄AAH00000090000000900000B006000000060003000B000300Q880H000Q880H000Q880H(90 000 000 00 030 000 30 030 00000000000000000000000000S反件查看成功I轉(zhuǎn)處群舞逹巽itft轉(zhuǎn)處群舞逹巽itif轉(zhuǎn)料常舞逹科ft;%科科常km料ft;%科科常K-涎料其-;%料

8、科耗K-科料ft;%料科耗K-科料ft;%料科耗K-科料ft;%料科耗葺認I錄下的文你大小是否鎖定133?物理地址24409、修改文件容:打輸入要修改的文件的名字;贈限當前目加ka輸入內(nèi)容:呂 dlf sdf s f sdf sdf 彰 df sdf sdf sdf sdf sd£ 氐件修改成功I”町 :MMiMWI XM; KXKXtMTXMi MPWXM; KW宦前目錄下的文件:匡件名大小 是否鎖定物理地址aa12SY244上科 MiXWXJtHNHKWilif 科 M M m4(XM4< "耳HJ<XM4<M4<10、對文件的鎖定進展裝換:PI

9、 J I* 耳 X/KEXEE 啊 EX 耳XiWXMXE図 KXi-iXilKEiM 啊K 料E魯輸入要轉(zhuǎn)換是否鎖定的文件的名字:(僅限當前目錄aa文件己轉(zhuǎn)換為自由讀寫I 當前目錄下的文件:文件名大小是否鎖定物理地址aa128N244011、刪除文件:目錄為空IM: JtX JtltjClCJtXJOtJOtjC JCJir耳 >1浮: JtM WKXXXKJHKXKXXXKMKMKA n魯輸入要刪除的文件的名字文件刪除成功IiM-X-WiMiK 現(xiàn)芹 芹料 XJtit掘KXJOC 崔 JmmtXWEXJIJtSn iiilir12、注銷登錄退出系統(tǒng):四、功能實現(xiàn)Mysys.h#i n

10、clude <stdio.h>#i nclude "myuserfile.h"/封裝了管理系統(tǒng)的方法class MSysterm/成員變量 private:FILE *myfile; MUser myuser;/成員函數(shù) public:/打印登陸后的用戶名/檢查虛擬文件系統(tǒng)跟是否存在/初始化虛擬磁盤創(chuàng)立用戶/用戶登錄/主控制程序/用戶注銷MSysterm() void outName(); int cheack(); int myformat(); int createuser(); / int logi n(); void mymai n(); int log

11、out();Myuserfile.h#in clude <stdio.h>class MUser/圭寸裝了管理文件的方法/成員變量public:FILE *myfile; char n ame20; char psd20; long listaddress; long myaddress;/用戶名/密碼/目錄地址/此用戶的地址private:long lastaddress;/成員函數(shù)/最后一個目錄的地址public:int createFile();/ 增加文件int delFile(char file name20);刪除文件int revampFile(char file n

12、ame20);修改文件int mydir();/列出當前目錄的所有文件夾in t viewFile(char file name20);查看文件int myCo nversio n( char file name20);轉(zhuǎn)換是否鎖定狀態(tài)private:int isSame(char filename_f20,char filename_s20);Mymain.cpp#i nclude <stdio.h> #in clude <iostream> #in clude "mysys.h" #i nclude <limits> using n

13、amespace std;int mai n()char nod1;int n_ select = 2 , i_1 =0; MSysterm mysys;*文件不存在的程序入口*/if(mysys.cheack()=-1)磁盤空間不存在cout<<"虛擬磁盤文件不存在,是否生成?Y/N "<<e ndl;cin»no d1; cin .clear(); /去除流的錯誤標記cin .ig nore( nu meric_limits<streamsize>:max(),'n'); /if(n od1='Y&#

14、39;| nod1='y')cout<<" 正在創(chuàng)立。"<<endl;if(mysys.myformat()!=1)創(chuàng)立磁盤空間cout<<"創(chuàng)立磁盤空間失??!即將退出。"<<e ndl;cin»no d1; return 2;cout<<" 創(chuàng)立完成!是否創(chuàng)立用戶?Y/N "<<e ndl;清空輸入流cin»no d1;cin .clear(); /去除流的錯誤標記cin. ig nore( nu meric_limits&l

15、t;streamsize>:max(),'n'); /清空輸入流if(n od1='Y'| nod仁='y') if(mysys.createuser()=1)倉 U立用戶cout<<" 創(chuàng)立用戶成功。"<<e ndl;elsecout<<"創(chuàng)立用戶失??!即將退出。"<<e ndl;return 3;elsecout<<"匿名用戶無法進入系統(tǒng),正在退出。"<<endl;return 4;elsecout<

16、<"程序已完畢!按任意鍵退出。"<<endl;return 1;*文件存在的程序入口*for (;)cout<<"*"<<e ndl;cout<<"請選擇:"<<e ndl;cout<<"1.登錄"<<endl<<"2.注冊"<<endl<<"3.退出"<<e ndl;cout<<"*"<<e n

17、dl;ci n»n_ select;cin .clear(); /去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),'n'); /清空輸入流if (n_select = 1)-for (int i_仁 0;i_1<=3;i_1+)登錄if (mysys.logi n()=1)cout<<"登陸成功!歡送您 "mysys.outName();break;else cout<<"用戶名不存在或密碼錯誤!"<<e ndl;

18、if (i_仁=4)-cout<<"非法用戶!"<<endl<<"輸入任意鍵退出。"<<endl; cin»no d1; return 5; break;if (n_select = 2)- if(mysys.createuser()=1)倉 U立用戶cout<<"創(chuàng)立用戶成功。"<<e ndl; elsecout<<"創(chuàng)立用戶失??!"<<e ndl;if (n_select = 3)-return 6;mys

19、ys.mymai n();return 0;Mysys.cpp#in clude "mysys.h"#in clude "allstruct.h"#in clude <iostream>#i nclude <stdio.h>#in clude <limits>用于去除殘留的輸入流using n amespace std;int MSysterm:cheack()檢查虛擬空間是否存在myfile=fope n( "test1.txt","r");if(myfile=NULL)ret

20、urn -1;/ 返回-1,代表文件不存在fclose(myfile);return 1;int MSysterm:myformat()int i =1;myfile=fope n("test1.txt","w"); if(myfile=NULL)return -1;s_user ms_user;ms_user.isuse=O;s_list ms_list;ms_list.isuse=O;s_file ms_file;ms_file.isuse=0;for (i =1 ; i<=5 ; i+)if(fwrite(&ms_user,sizeo

21、f(ms_user),1,myfile)!=1) - -cout<<"用戶格式信息寫入失??!"<<e ndl;fclose(myfile);return -2;用戶區(qū)格式化for (i = 1; i<=50 ;i+)if(fwrite(&ms_list,sizeof(ms_list),1,myfile)!=1) - -cout<<"目錄格式信息寫入失敗!"<<e ndl;fclose(myfile);return -3;目錄區(qū)格式化for (i=0;i<=199;i+)if(fwrite

22、(&m s_file,sizeof(ms_file),1,myfile)!=1)數(shù)據(jù)區(qū)格式化 - -cout<<"數(shù)據(jù)格式信息寫入失??!"<<e ndl;fclose(myfile);return -4;fclose(myfile); return 1;int MSysterm:createuser()創(chuàng)立用戶s_user ms_user,ms_user2;int no waddress = 0 ,issame=0 ,m=0 , i =1 ;/位,循環(huán)使用的變量記錄當前的掃描指針,密碼比對標志cout<<"正在檢查用戶空

23、間是否足夠。"<<endl;myfile=fope n( "test1.txt","r");for (i=1;i<=5;i+,fseek(myfile,44,1), no waddress+)檢查用戶空間是否足夠if (fread(&m s_user2.isuse,4,1,myfile)=0) -cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<e ndl;fclose(myfile);return -1;if (ms_user2.isuse=0)-brea

24、k;if (i=6)cout<<"用戶空間已滿!創(chuàng)立用戶失敗"<<e ndl;return -2;for (;)cout<<" 請輸入新用戶的用戶名:"<<e ndl;cin>> ms_user. name;ci n.clear(); /去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),'n'); /清空輸入流fseek(myfile,0,0);for (i=1;i<=5;i+)檢查用戶名if (fre

25、ad(&ms_user2.isuse,4,1,myfile)=0 )/找到被使用的用戶區(qū),下一步讀取名字-cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;if (ms_user2.isuse=0)-fseek(myfile,44,1);elseif (fread(&ms_user2. name,20,1,myfile)=0)讀取用戶區(qū)的名字 -cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<e

26、 ndl;fclose(myfile);return -1;for (m =0 ;m<=19;m+)if (ms_user. namem != ms_user2. namem)- -issame = 0;break;elseissame = 1;if (ms_user. namem = '0')-break;if (issame = 1)cout<<"用戶名重復!請重新輸入:"<<e ndl;break;fseek(myfile,24,1);if (i>=6)for (;)/輸入密碼cout<<"請輸

27、入密碼,最多19位。"<<endl;cin»m s_user.psd;cin .clear(); /去除流的錯誤標記清空輸入流清空輸入流user.psd<<"cin. ig nore( nu meric_limits<streamsize>:max(),'n'); / cout<<"請再次輸入密碼:"<<e ndl;cin»m s_user2.psd;cin .clear(); /去除流的錯誤標記cin. ig nore( nu meric_limits<

28、;streamsize>:max(),'n'); /for (m =0 ;m<=19;m+)if (ms_user.psdm != ms_user2.psdm)- -issame = 0;cout<<" 兩次密碼不匹配"<<''<<ms"<<ms_user2.psd<<""<<m<<e ndl;break;elseissame = 1;if (ms_user.psdm = '0')-break;if (

29、issame = 1)break;cout<<" 進入存儲。"<<endl; ms_user.isuse =1;/空間使用置為使用(1);ms_user.address = 0;/默認不存在目錄fclose(myfile);myfile=fope n( "test1.txt","r+");fseek(myfile,48* no waddress,0);if(fwrite(&m s_user,sizeof(ms_user),1,myfile) = 0) - -cout<<"寫入用戶信

30、息失?。?quot;<<e ndl; else break;fclose(myfile);return 1;int MSysterm:logi n()用戶登錄s_user ms_user,ms_user2;int issame = 0, m = 0 , i =0 ;/比擬標記,循環(huán)使用的變量cout<<" 請輸入用戶名:"<<e ndl;cin»m s_user. name;cin .clear(); / 去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),&

31、#39;n'); /清空輸入流myfile=fope n( "test1.txt","r");for (i = 1;i<=5;i+)if (fread(&ms_user2.isuse,4,1,myfile)=0)讀取被使用的用戶區(qū) -cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<e ndl;fclose(myfile);return -1;if (ms_user2.isuse=0)-fseek(myfile,44,1);con ti nue;elseif (fread

32、(&ms_user2. name,20,1,myfile)=0)讀取名字 -cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;for (m =0 ;m<=19;m+)if (ms_user. namem != ms_user2. namem)- -issame = 0;break;elseissame = 1;if (ms_user. namem = '0')-break;if (issame = 1)if (fread(&ms_use

33、r2.psd,20,1,myfile)=0)讀取密碼清空輸入讀取目錄地 cout<<"讀取密碼失敗!磁盤錯誤。"<<e ndl;fclose(myfile);return -1;for (int k=0;k<=2;k+)cout<<"請輸入密碼:"<<e ndl;cin»m s_user.psd; cin .clear(); /去除流的錯誤標記cin.ign ore( nu meric_limits<streamsize>:max(),'n'); /流for (m

34、 =0 ;m<=19;m+)if (ms_user.psdm != ms_user2.psdm)- -issame = 0; break;elseissame = 1;if (ms_user.psdm = '0')-break;if (issame = 0) cout<<" 密碼錯誤,請重新輸入。 "<<e ndl; elseif (fread(&ms_user2.address,4,1,myfile)=0)址_cout<<"讀取目錄失敗!磁盤錯誤。"<<e ndl;fclos

35、e(myfile);return -1;for (m=0;m<=19;m+)對對象 myuser 賦值myuser. namem = ms_user2 .n amem; myuser.psdm = ms_user2.psdm; - myuser.listaddress = ms_user2.address;myuser.myaddress = (i-1)*48;fclose(myfile);return 1;/ 返回登錄成功fclose(myfile);return -2;/ 密碼錯誤fseek(myfile,24,1);fclose(myfile); return -1;void MS

36、ysterm:mymai n()主控制程序int m_poi nt=9,myget=0;記錄使用第幾層控制臺,接收函數(shù)返回值char m_name120,m _n ame220;for (;)if(m_poi nt= 0) myget=logout(); break;cout<<e ndlvv"* *"<<e ndl"coutvv"當前目錄下的文件: myget = myuser.mydir();"<<e ndl;coutvv'*"vve ndl;coutvv"*"vve

37、 ndl;*coutvv" 請輸入您的選擇:"vve ndl; coutvv"1.查看文件容"vvendl;coutvv"2.新建文件"vvendl;coutvv"3.刪除文件"vvendl;coutvv"4.修改文件"vvendl;coutvv"5.是否鎖定狀態(tài)轉(zhuǎn)換"vvendl;coutvv"0.注銷,退出程序"vvendl;coutvv"*"vve ndl;cin>> m_po int;cin .clear(); /

38、去除流的錯誤標記cin .ig nore(nu meric_limitsvstreamsize>:max(),'n'); /清空輸入流switch (m_po int) -case 1:if (myuser.listaddress = 0)coutvv" 您還沒有創(chuàng)立文件!"vve ndl;break;coutvv"請輸入要查看的文件的名字:(僅限當前目錄)"vvendl;cin»m_n amel;cin .clear(); /去除流的錯誤標記cin .ig nore(nu meric_limitsvstreamsize&

39、gt;:max(),'n'); /清空輸入流myget = myuser.viewFile(m _n amel);switch (myget)case 1:coutvv" 文件查看成功!"vve ndl;break;case -1:case -2: cout<<"文件不存在!"<<e ndl;break;default: break; break;/case 1文件翻開case 2:myget = myuser.createFile();switch (myget)case 1:cout<<"

40、創(chuàng)立成功! "<<e ndl; break;case -1: cout<<"磁盤翻開失??!"<<e ndl;break;case -2: cout<<"目錄空間已滿!"<<e ndl;break;case -3: cout<<" 數(shù)據(jù)空間已滿!"<<e ndl;break;case -4: cout<<" 文件名已存在!"<<e ndl;break;default:"<<e n

41、dl;cout<<"創(chuàng)立文件失敗,原因未知!break;break;/case 2新建文件case 3:if (myuser.listaddress = 0)cout<<"請輸入要刪除的文件的名字: (僅限當前目錄)"<<endl; cin»m_n amel;cin .clear(); /去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),'n'); /清空輸入流myget = myuser.delFile(m_ name1);swi

42、tch (myget)case 1:cout<<" 文件刪除成功! "<<e ndl; break;case -1:cout<<"磁盤翻開失??!"<<e ndl;break;case -2:cout<<"文件不存在!"<<e ndl;break;case -4:cout<<"文件鎖定!不能刪除!"<<e ndl;break;default:cout<<"未知原因,刪除失敗!"<<

43、;e ndl;break; break;/case 3刪除文件case 4:if (myuser.listaddress = 0)cout<<" 您還沒有創(chuàng)立文件! "<<e ndl;break;cout<<"請輸入要修改的文件的名字: (僅限當前目錄)"<<endl; cin»m_n ame1;cin .clear(); /去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),'n'); /清空輸入流myget

44、= myuser.revampFile(m_ name1);switch (myget)case 1:cout<<" 文件修改成功! "<<e ndl; break;case -1:case -2:cout<<"文件不存在!"<<e ndl;break;case -4:/ cout<<" 文件鎖定!無法修改!"<<e ndl;break;case -5:cout<<" 輸入容過多!無法修改!"<<e ndl;break;

45、default:/ cout<<"未知原因,修改失敗!"<<e ndl;break; break;/case 4 修改文件case 5:if (myuser.listaddress = 0)cout<<" 您還沒有創(chuàng)立文件!"<<e ndl;break;cout<<"請輸入要轉(zhuǎn)換是否鎖定的文件的名字:(僅限當前目錄)"<<endl;cin»m_n ame1;cin .clear(); /去除流的錯誤標記cin .ig nore(nu meric_limi

46、ts<streamsize>:max(),'n'); /清空輸入流myget = myuser.myC on vers ion(m_n ame1);switch (myget)case 0:cout<<" 文件已轉(zhuǎn)換為鎖定! "<<e ndl; break;case 1:cout<<"文件已轉(zhuǎn)換為自由讀寫!"<<e ndl;break;case -1:cout<<"磁盤翻開失敗!"<<e ndl;break;case -2:defaul

47、t:cout<<"未知原因,修改失??!"<<e ndl;break;break;/case 5轉(zhuǎn)換是否鎖定狀態(tài)default:break;/switchint MSysterm:logout()用戶注銷char word20 = '0'for (int i = 0 ; i<=19 ; i+)myuser. namei = wordi; myuser.psdi = wordi;fclose(myfile);cout<<"已注銷! "<<e ndl;return 1;void MSyste

48、rm:outName()打印登陸后的用戶名cout<<myuser. name<<e ndl;Myuserfile.cpp#in clude <iostream>#i nclude <stdio.h>#i nclude <ioma nip>#in clude <limits>/用于去除殘留的輸入流#i nclude "myuserfile.h"#in clude "allstruct.h"using n amespace std;int MUser:createFile()增加文件s

49、_list ms_list;s_file ms_file;目錄循環(huán)記錄變量,數(shù)據(jù)塊long no waddress =0 ,f_address10, nu m_char = 0 ;/ 地址變量組,字符個數(shù)文件大小-int f_ad_num = 0 , myerr = 0 ,i = 1; /寫入的塊數(shù),是否在最終寫入時失敗失敗置1char f_n ame20 = ' ',m='0',e='0',f_islock;long oldastaddress = lastaddress ;/上一個目錄地址用于出錯回滾myfile=fope n( "

50、test1.txt","r+");if (myfile = NULL)cout<<" 讀取磁盤失??!"<<e ndl;fclose(myfile);return -1;fseek(myfile,48*5,0);文件指針跳到目錄區(qū)for (i=1;i<=50;i+,fseek(myfile,40,1), no waddress+)檢查目錄空間是否足夠if (fread(&ms_list.isuse,4,1,myfile)=0)讀取是否使用 -cout<<"讀取目錄空間失敗,虛擬磁盤格式錯

51、誤,可能已被損壞"<<e ndl;fclose(myfile);return -1;if (ms_list.isuse=O)如果讀取到未使用那么跳出檢測-break;if (i=51)cout<<"目錄空間已滿!創(chuàng)立文件失敗 "<<e ndl;fclose(myfile);return -2;fseek(myfile,48*5+44*50,0);文件指針跳到數(shù)據(jù)區(qū)for (i=1;i<=200;i+,fseek(myfile,260,1)檢查數(shù)據(jù)空間是否足夠(初步檢查)if (fread(&m s_file.isu

52、se,4,1,myfile)=0)/讀取是否使用 -cout<<"讀取數(shù)據(jù)空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<e ndl;fclose(myfile);return -1;if (ms_file.isuse=O)如果有空白的數(shù)據(jù)塊那么跳出-break;if (i=201)cout<<"數(shù)據(jù)空間已滿!創(chuàng)立文件失敗 "<<e ndl;fclose(myfile); return -2;cout<<"請輸入文件名(字母和數(shù)字,最多19個字符):"<<endl;

53、cin»f_n ame;cin .clear(); /去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),'n'); /清空輸入流fseek(myfile,48*5,0);文件指針跳到目錄區(qū)for (i=1;i<=50;i+)檢查文件名是否被使用if (fread(&ms_list,sizeof(ms_list),1,myfile)=0)讀取目錄 - -cout<<"讀取目錄空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<e ndl;fclos

54、e(myfile);return -1;if (ms_list.isuse = 1)/如果讀取到未使用那么跳出檢測-if( isSame(f_ name,msist .n ame) = 1) - -fclose(myfile);return -4;for (;)cout<<"文件由多少個字符m 組成?(必須小于2550個字符)"<<endl;cin»nu m_char;ci n.clear(); /去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),'n'

55、); /清空輸入流if (num _char <= 2550)-break;cout<<" 文件長度必須小于 2550個字符。"<<endl;ms_list.poi ntsize = nu m_char;cout<<"文件是否鎖定? y鎖定/ n(或其他)自由讀寫"<<endl;/ 確定是否鎖定 cin>> f_islock;cin .clear(); /去除流的錯誤標記cin .ig nore(nu meric_limits<streamsize>:max(),'n&

56、#39;); /清空輸入流if( f_islock = 'y' | f_islock = 'Y')- -msist.isfile = 0;-elsems_list.isfile =1;-fseek(myfile,48*5+44*50,0);文件指針跳到數(shù)據(jù)區(qū)for ( i=0 ; i<=199 && f_ad_num<=(num_char/255); i+ , fseek(myfile,260,1) )/檢查數(shù)據(jù)空間是否足夠-if (fread(&m s_file.isuse,4,1,myfile)=0) -cout<&

57、lt;"讀取數(shù)據(jù)空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<e ndl;fclose(myfile);return -1;if (ms_file.isuse=0)/ 如果有空白區(qū)塊 f_addressf_ad_ num= i*264+48*5+44*50;記錄下當前空白區(qū)塊的絕對物理地址f_ad_ nu m+;先用后加if (f_ad_num <= (n um_char/255)空白的地址缺乏- -cout<<"沒有足夠的磁盤空間,創(chuàng)立失敗!"<<e ndl;fclose(myfile);return -3;m

58、s_file.isuse = 1;int k = 0;/for循環(huán)變量for (i=0 ; i<f_ad_ num ; i+) -if ( i < (f_ad_num-1) )/對下個數(shù)據(jù)塊進展ms_file .n ext = f_addressi+1;elsems_file .n ext = 0;-fseek(myfile,f_addressi,O);跳轉(zhuǎn)到空白數(shù)據(jù)塊if ( num_char > 255)/數(shù)據(jù)太多,一個區(qū)塊放不了if ( fwrite(&m s_file.isuse,4,1,myfile) = 0)/寫入已被使用 -cout<<" 數(shù)據(jù)模塊寫入isuse失敗"<<endl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論