2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計</b></p><p>  題 目:文件系統(tǒng)的設(shè)計與實(shí)現(xiàn) </p><p><b>  學(xué)生姓名:胡浩亮 </b></p><p>  學(xué) 院:信息工程學(xué)院</p><p>  系 別:計算機(jī)系 </p><p>  專

2、 業(yè):軟件工程 </p><p><b>  班 級: </b></p><p><b>  指導(dǎo)教師: </b></p><p>  2009年1月15日</p><p><b>  摘 要</b></p><p>  設(shè)計一個小型的文件管理系統(tǒng),

3、在XP系統(tǒng)下,建立一個大文件,把它假想成一張盤,在其上實(shí)現(xiàn)小型文件管理系統(tǒng)。該小型文件系統(tǒng)有一個簡單的主界面,提供五條簡單的命令:dir、mkfile、type、copy、delfile,分別用于顯示文件目錄、建立文件、顯示文件內(nèi)容、復(fù)制和刪除一個文件。</p><p>  關(guān)鍵字:操作系統(tǒng),課程設(shè)計,文件系統(tǒng)</p><p><b>  目 錄</b></p&

4、gt;<p>  第一章設(shè)計內(nèi)容1</p><p>  1.1 設(shè)計目的1</p><p>  1.2 設(shè)計要求1</p><p>  1.3 程序設(shè)計思想1</p><p>  第二章 數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖2</p><p>  2.1 數(shù)據(jù)結(jié)構(gòu)2</p><p&

5、gt;  2.2 程序功能圖2</p><p>  2.3 程序流程圖3</p><p>  第三章 程序運(yùn)行結(jié)果及分析6</p><p>  3.1 程序運(yùn)行結(jié)果6</p><p>  3.2 程序分析7</p><p>  第四章 心得體會8</p><p><b> 

6、 參考文獻(xiàn)9</b></p><p>  附錄 程序清單10</p><p><b>  設(shè)計內(nèi)容</b></p><p><b>  1.1 設(shè)計目的</b></p><p>  通過設(shè)計一個小型文件系統(tǒng),進(jìn)一步掌握文件管理的方法和技術(shù),使學(xué)生初步具有研究、設(shè)計、編制和調(diào)試操作系統(tǒng)

7、模塊的能力。</p><p><b>  1.2 設(shè)計要求</b></p><p><b>  (1) 問題描述</b></p><p>  在任一OS下,建立一個大文件,把它假想成一張盤,在其中實(shí)現(xiàn)一個簡單的小型文件系統(tǒng)。</p><p><b>  (2) 基本要求</b>

8、</p><p>  該文件系統(tǒng)沒有子目錄機(jī)制,文件連續(xù)分配,不考慮換“盤”和分區(qū)。做一個簡單的操作界面,提供五條簡單的命令:dir、mkfile、type、copy、delfile,分別用于顯示文件目錄、建立文件、顯示文件內(nèi)容、復(fù)制和刪除一個文件。</p><p>  1.3 程序設(shè)計思想</p><p>  閱讀操作系統(tǒng)方面的書籍,了解操作系統(tǒng)的文件系統(tǒng)原理。結(jié)

9、合分析課程設(shè)計要求,確定實(shí)體以及它們之間的關(guān)系。實(shí)體關(guān)系有三張表(磁盤空間分配表、文件表、打開文件表)、一個模擬磁盤的數(shù)組、命令服務(wù)和用戶構(gòu)成。用戶負(fù)責(zé)輸入命令。命令服務(wù)實(shí)現(xiàn)命令的解釋、命令檢查、命令幫助以及調(diào)用相關(guān)模塊執(zhí)行相應(yīng)的命令功能。</p><p>  建立一個系統(tǒng)文件(模擬盤),并對此進(jìn)行盤塊的劃分,第一個盤塊存放文件目錄,第二盤塊存放盤塊位示圖,自第三個盤塊開始存放各具體文件的內(nèi)容,文件目錄存放文件的

10、名字,文件的擴(kuò)展名,開始盤塊號,所占用的盤塊數(shù)目,文件的大?。槐P塊位示圖用來標(biāo)記盤塊是否被占用。</p><p>  構(gòu)造這些實(shí)體的關(guān)系圖,數(shù)據(jù)流圖、程序流程圖來進(jìn)行具體的設(shè)計。</p><p>  第二章 數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖</p><p><b>  2.1 數(shù)據(jù)結(jié)構(gòu)</b></p><p>  數(shù)據(jù)結(jié)構(gòu)說明

11、:本程序所運(yùn)用的主要有兩個數(shù)據(jù)結(jié)構(gòu),分別如下:</p><p><b>  文件目錄結(jié)構(gòu):</b></p><p>  struct filename { //文件目錄項結(jié)構(gòu)體 </p><p>  char name[9]; //文件名</p>&l

12、t;p>  char ext[4]; //擴(kuò)展名</p><p>  int i; //文件所占用磁盤塊的第一個磁盤塊號</p><p>  int Amount; //文件所占用磁盤塊的塊數(shù)</p><p>  long int size;

13、 //文件大小</p><p><b>  };</b></p><p><b>  盤塊結(jié)構(gòu):</b></p><p>  struct empty { //盤塊結(jié)構(gòu)體</p><p>  int map[100];

14、 //盤塊位示圖</p><p>  int filenum; //文件數(shù)量</p><p><b>  }; </b></p><p><b>  2.2 程序功能圖</b></p><p>  文件系統(tǒng)提供的文件操作有建立文件(mkfile)、復(fù)制文

15、件(copy)、顯示文件所有內(nèi)容(type)、刪除文件(delfile)??梢酝ㄟ^鍵盤輸入命令來模擬文件的操作。</p><p><b>  2.3 程序流程圖</b></p><p> ?。?)主程序流程圖:</p><p> ?。?)初始化模塊流程圖:</p><p> ?。?)寫入磁盤流程圖:</p>

16、<p>  (4)顯示目錄流程圖:</p><p>  (5)顯示文件流程圖:</p><p> ?。?)刪除文件流程圖:</p><p>  (7)復(fù)制文件流程圖:</p><p> ?。?)創(chuàng)建文件流程圖:</p><p>  第三章 程序運(yùn)行結(jié)果及分析</p><p>  3.

17、1 程序運(yùn)行結(jié)果</p><p><b> ?。?)程序主界面</b></p><p>  (2)創(chuàng)建一個文件,輸入“3”顯示“輸入文件內(nèi)容,按@ 鍵保存且退出!”</p><p> ?。?)往文件里寫內(nèi)容:Hello World!顯示文件長度,并要求給文件命名,命名后保存返回主界面</p><p>  (4)讀取剛才寫

18、入的文件,結(jié)果正確</p><p> ?。?)刪除剛寫入的文件,測試成功</p><p>  對于測試用例,還有很多路徑都有測試過,鑒于篇幅,就不再列出所有可能的路徑來進(jìn)行白盒測試。</p><p><b>  3.2 程序分析</b></p><p>  本程序使用一個Windows下的文件來模擬一個磁盤,向磁盤中裝入

19、文件并進(jìn)行相關(guān)操作。采用了以空間換時間的算法,文件的大小在系統(tǒng)中是固定的,雖然會浪費(fèi)一些空間,但文件的存取速率會加快。</p><p><b>  第四章 心得體會</b></p><p>  通過本次的課程設(shè)計,使我能夠正確運(yùn)用操作系統(tǒng)課程中所學(xué)的基本理論和知識,加深了對文件系統(tǒng)基本概念的理解,以及磁盤文件系統(tǒng)的文件操作。還有讓我感受挺深的是對軟件工程方法的應(yīng)用。設(shè)

20、計一個軟件,先要做好需求分析,這一點(diǎn)很重要,如果沒有分析好需求,到軟件設(shè)計的最后,發(fā)現(xiàn)所做的功能不符合要求,那么一切都得重做,前面所有的努力都付諸東流。還有比較重要的是,畫好程流程圖。在程序設(shè)計的開始,由于分析工作做得不夠深入和細(xì)致,吃了點(diǎn)小苦頭。對于這樣一個小設(shè)計來說,都會吃苦頭,要是大工程更是無法想像,有可能會項目失敗。以后得加強(qiáng)對軟件工程的學(xué)習(xí)。另外在運(yùn)用C語言的時候,感覺有點(diǎn)生疏,在組織語言時時而出錯,在編程和調(diào)試的過程中,經(jīng)常

21、會出現(xiàn)意想不到的問題,并非每個問題都可以從相關(guān)資料中找到解決方法,有些問題是無法預(yù)料到的,這就需要通過自己理性的分析得出問題的解決方案。</p><p>  在設(shè)計過程中,查詢了不少相關(guān)資料,不斷的發(fā)現(xiàn)問題、提出問題、解決問題。在對自己所編寫的源程序段的糾錯的過程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識,同時在編程時用到了模塊化的設(shè)計思想,這種編程方法可以使我們的編程變的更簡單,可以使我們的查錯與糾錯變的

22、更方便??偟膩碚f通過這次的設(shè)計的學(xué)習(xí)使我學(xué)到了很多在平時的學(xué)習(xí)中學(xué)不到的很多東西,通過這次課程設(shè)計,使我對操作系統(tǒng)和編程產(chǎn)生興趣,我想我會在這條路上繼續(xù)前進(jìn)下去。我相信,只要不斷的嚴(yán)格要求自己,注意培養(yǎng)自己的思維能力,就一定會有更大更輝煌的發(fā)展和提高。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 張堯?qū)W編.計算機(jī)操作系統(tǒng)教程(第三版)習(xí)題

23、解答與實(shí)驗(yàn)指導(dǎo).北京:清華大學(xué)出版社,2006</p><p>  [2] 湯子瀛主編.計算機(jī)操作系統(tǒng)(第三版).西安:西安電子科技大學(xué)出版社,2001 </p><p>  [3] CSDN論壇.bbs.csdn.net</p><p><b>  附錄 程序清單</b></p><p>  #include &quo

24、t;iostream.h"</p><p>  #include "string"</p><p>  #include "stdio.h"</p><p>  extern "C" void exit(int);</p><p>  struct filename

25、 //文件目錄項結(jié)構(gòu)體 </p><p><b>  {</b></p><p>  char name[9]; //文件名</p><p>  char ext[4]; //擴(kuò)展名</p><p

26、>  int i; //文件所占用磁盤塊的第一個磁盤塊號</p><p>  int Amount; //文件所占用磁盤塊的塊數(shù)</p><p>  long int size; //文件大小</p><p>  }file[11];</

27、p><p><b>  int num;</b></p><p>  struct empty //盤塊結(jié)構(gòu)體</p><p>  { int map[11]; //盤塊位示圖</p><p>  int filenum;

28、 //文件數(shù)量</p><p>  }emptytable; </p><p><b>  //☆模塊說明:</b></p><p>  void SystemInit() //模擬磁盤文件初始化函數(shù)</p><p>  { for(int i=2;i

29、<10;i++) //初始化存放位示圖的盤塊</p><p>  emptytable.map[i]=0;</p><p>  emptytable.map[0]=1;</p><p>  emptytable.map[1]=1;</p><p>  emptytable.filenum=0;</p&

30、gt;<p><b>  FILE *fp;</b></p><p>  if((fp=fopen("filesys","wb+"))==NULL) //wb+:為讀寫建立一個"新"文件;打開系統(tǒng)文件將文件目錄盤塊和</p><p>  {

31、 //位示圖盤塊寫入系統(tǒng)文件</p><p>  printf("can not open file \n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  fseek

32、(fp,512L,0);</p><p>  fwrite(&emptytable,sizeof(struct empty),1,fp);</p><p>  fclose(fp);</p><p>  printf("!!!初始化系統(tǒng)成功!!!");</p><p><b>  }</b>&

33、lt;/p><p>  void WriteFile() //將目錄以及空閑盤塊表寫入磁盤</p><p>  { </p><p><b>  FILE *fp;</b></p><p>  if((fp=fopen(

34、"filesys","rb+"))==NULL)</p><p><b>  {</b></p><p>  printf("can not open file \n");</p><p><b>  exit(0);</b></p><p&g

35、t;<b>  }</b></p><p>  rewind(fp);</p><p>  for(int i=0;i<num;i++)</p><p><b>  {</b></p><p>  fwrite(&file[i],sizeof(struct filename),1,fp

36、); //////////////////////文件目錄</p><p><b>  }</b></p><p>  fseek(fp,512L,0);</p><p>  fwrite(&emptytable,sizeof(struct empty),1,fp); //////////////////////

37、//////位示圖</p><p>  fclose(fp);</p><p><b>  }</b></p><p>  void dir() // 顯示文件目錄</p><p>  { int i,j;</p>

38、<p><b>  FILE *fp;</b></p><p>  if((fp=fopen("filesys","rb"))==NULL)</p><p>  {printf("can not open file \n");</p><p><b>  ex

39、it(0);</b></p><p><b>  } </b></p><p>  fseek(fp,512L,0); //空閑盤塊表的定位</p><p>  fread(&emptytable,sizeof(struct empty),1,fp);<

40、;/p><p>  rewind(fp); //文件目錄表的定位</p><p>  num=emptytable.filenum;</p><p>  for(i=0;i<num;i++)</p><p>  fread(&file[i],sizeof(

41、struct filename),1,fp);</p><p>  if (num!=0)</p><p>  { printf("系統(tǒng)文件目錄結(jié)構(gòu):\n");</p><p>  for(i=0,j=1;i<num;i++,j++)</p><p><b>  { </b></p>

42、<p>  printf("%s.%s\n",file[i].name,file[i].ext);</p><p><b>  if(j==5)</b></p><p>  { printf("\n");</p><p><b>  j=1;</b></p>

43、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n文件數(shù)量為 %d ",num);</p><p>  fclose(fp);</p&g

44、t;<p><b>  }</b></p><p>  void type() //顯示文件內(nèi)容</p><p><b>  { </b></p><p><b>  FILE *fp;</b>&l

45、t;/p><p><b>  int i,j;</b></p><p>  if((fp=fopen("filesys","rb"))==NULL)</p><p>  {printf("can not open file \n");</p><p><b&

46、gt;  exit(0);</b></p><p><b>  }</b></p><p>  fseek(fp,512L,0);</p><p>  fread(&emptytable,sizeof(struct empty),1,fp);</p><p>  rewind(fp);</p&g

47、t;<p>  num=emptytable.filenum;</p><p>  for(i=0;i<num;i++)</p><p>  { fread(&file[i],sizeof(struct filename),1,fp);</p><p>  printf("%s.%s\n",file[i].na

48、me,file[i].ext); ////////////////////////////</p><p><b>  }</b></p><p>  char name[9],ext1[4];</p><p>  printf("請輸入文件名:\n");</p><p&g

49、t;  gets(name); //scanf("%s",name);//getchar(); </p><p>  printf("請輸入擴(kuò)展名:");</p><p>  gets(ext1); //scanf("%s",ext1);getchar();</p><p>  if(

50、*(name+0)=='\0')</p><p><b>  {</b></p><p>  printf("文件名不能為空 ! \n");</p><p><b>  return;</b></p><p><b>  }</b>&l

51、t;/p><p>  if(*ext1=='\0') </p><p>  strcpy(ext1,"txt");</p><p>  int sign=0;</p><p>  for(i=0;i<num;i++)</p><p>  if((strcmp(file[i].nam

52、e,name)==0) && (strcmp(file[i].ext,ext1)==0))</p><p>  { printf("---找到第%d個文件(從0開始)----\n",i); </p><p><b>  sign=1;</b></p><p><b>  break;<

53、/b></p><p><b>  }</b></p><p>  /////////////////////////////////////////////</p><p>  if(sign==0)</p><p>  { printf("無此文件\n");</p><

54、p><b>  return;</b></p><p><b>  }</b></p><p><b>  //顯示文件</b></p><p>  int b,m,n ;</p><p>  b=file[i].i;</p><p>  n=fi

55、le[i].size;</p><p>  printf("---該文件位于第%d(從第0塊開始)塊\n",b); ///////////////////////</p><p>  printf("---從文件讀出的文件長度為:%d\n---",n);</p><p>  //fseek(f

56、p,b*512L,0);</p><p><b>  char cc;</b></p><p>  //printf("---文件內(nèi)容長度為:%ld\n",n);</p><p>  printf("---文件內(nèi)容為:---\n");</p><p>  for( m=0,j=1;

57、 m<n; m++,j++) //////////////////////////////////////////////////// </p><p><b>  { </b></p><p>  fseek(fp,b*512L+m,0);</p><p>  //fread

58、(&cc,sizeof(char),1,fp); </p><p>  cc=fgetc(fp); </p><p>  printf("%c",cc);</p><p>  if(j%80==0)printf("\n");</p><p><b>  }</b&g

59、t;</p><p>  printf("\n"); </p><p>  fclose(fp);</p><p><b>  }</b></p><p>  void delfile() //刪除一個文件&

60、lt;/p><p>  { FILE *fp;</p><p><b>  int i;</b></p><p>  if((fp=fopen("filesys","r"))==NULL)</p><p><b>  {</b></p>

61、<p>  printf("can not open file \n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  fseek(fp,512L,0);</p><p>  fread(&e

62、mptytable,sizeof(struct empty),1,fp);</p><p>  rewind(fp);</p><p>  num=emptytable.filenum;</p><p>  for(i=0;i<num;i++)</p><p>  fread(&file[i],sizeof(struct fil

63、ename),1,fp);</p><p>  char name[9],ext1[3];</p><p>  printf("請輸入文件名:\n");</p><p>  gets(name);</p><p>  //scanf("%s",name);getchar();</p>&l

64、t;p>  printf("請輸入擴(kuò)展名:\n");</p><p>  gets(ext1);</p><p>  //scanf("%s",ext1);getchar();</p><p>  if(*name=='\0')</p><p>  {printf("文

65、件名不能為空 ! \n"); return; }</p><p>  if(*ext1=='\0') strcpy(ext1,"txt");</p><p>  char judge;</p><p>  printf("是否刪除文件%s.%s [y/n]",name,ext1);</p&

66、gt;<p>  scanf("%c",&judge); getchar();</p><p>  if((judge=='y')||(judge=='Y'))</p><p>  printf("準(zhǔn)備刪除文件%s.%s !\n",name,ext1);</p><p>

67、;  else if((judge=='n')||(judge=='N'))</p><p><b>  return;</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  print

68、f("系統(tǒng)默認(rèn)放棄!\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  int sign=0;</p><p>  for(i=0;i<num;i++)</p><p>  if

69、((strcmp(file[i].name,name)==0)&&(strcmp(file[i].ext,ext1)==0))</p><p><b>  {</b></p><p><b>  sign=1; </b></p><p><b>  break;</b></p&

70、gt;<p><b>  }</b></p><p>  if(sign==0)</p><p>  { printf("文件名錯\n"); </p><p><b>  return; </b></p><p><b>  }</b>

71、;</p><p><b>  //回收空間</b></p><p>  int b=file[i].i;</p><p>  int Amount=file[i].Amount;</p><p><b>  int j;</b></p><p>  for(j=0;j<

72、;Amount;j++)</p><p>  emptytable.map[b++]=0;</p><p>  for( j=i;j<num-1;j++)</p><p>  { strcpy(file[j].name,file[j+1].name);</p><p>  strcpy(file[j].ext,file[j+1].ex

73、t);</p><p>  file[j].i=file[j+1].i;</p><p>  file[j].size=file[j+1].size;</p><p>  file[j].Amount=file[j+1].Amount;</p><p><b>  }</b></p><p>  

74、emptytable.filenum=emptytable.filenum-1;</p><p>  num=emptytable.filenum;</p><p>  WriteFile();</p><p>  fclose(fp);</p><p><b>  }</b></p><p> 

75、 void copy() //復(fù)制一個文件</p><p>  { FILE *fq;</p><p><b>  int i,j;</b></p><p>  if((fq=fopen("filesys","rb+"))=

76、=NULL)</p><p>  {printf("can not open file \n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  fseek(fq,512l,0);</p><

77、;p>  fread(&emptytable,sizeof(struct empty),1,fq);</p><p>  rewind(fq);</p><p>  num=emptytable.filenum;</p><p>  for(i=0;i<num;i++)</p><p>  fread(&file[

78、i],sizeof(struct filename),1,fq);</p><p>  char SourceName[9],DestName[9],ext1[4],ext2[4];</p><p>  printf("請輸入源文件名:");</p><p>  gets(SourceName); //scan

79、f("%s",SourceName);getchar();</p><p>  printf("請輸入源文件擴(kuò)展名:");</p><p>  gets(ext1); //scanf("%s",ext1);getchar();</p><p>  printf

80、("請輸入目標(biāo)文件名:");</p><p>  gets(DestName); //scanf("%s",DestName);getchar();</p><p>  printf("請輸入目標(biāo)擴(kuò)展文件名");</p><p>  gets(ext2);

81、 //scanf("%s",ext2);getchar();</p><p>  if(*ext2=='\0') strcmp(ext2,"txt");</p><p>  if((*SourceName)=='\0' || (*DestName)=='\0')<

82、;/p><p><b>  {</b></p><p>  cout<<"錯誤! 文件名不能為空!\n";</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(

83、strcmp(SourceName,DestName)==0)</p><p><b>  {</b></p><p>  cout<<"錯誤! 兩個文件名不能相等!\n";</p><p><b>  return;</b></p><p><b>  }

84、</b></p><p>  for(i=0;i<num;i++) </p><p>  if(strcmp(SourceName,file[i].name)==0)</p><p><b>  { </b></p><p>  strcpy(file[num].

85、name,DestName);</p><p>  strcpy(file[num].ext,ext2);</p><p>  //file[num].i=file[i].i;</p><p>  file[num].size=file[i].size;</p><p>  file[num].Amount=file[i].Amount;&l

86、t;/p><p>  break; /////////////////////</p><p><b>  }</b></p><p>  if (i<num)</p><p>  printf("輸入的文件名與第%d個源文件相等(i

87、從0開始)\n",i); ////////////////////////</p><p><b>  else</b></p><p><b>  { </b></p><p>  printf("不存在源文件\n");</p><p><b> 

88、 return;</b></p><p><b>  }</b></p><p><b>  //空間分配</b></p><p>  int sign=0;</p><p>  for(int m=2 ; m<=10-file[num].Amount ; m++)</p&g

89、t;<p><b>  {</b></p><p>  if(emptytable.map[m]==0)</p><p><b>  {</b></p><p>  for( j=file[i].Amount; j>0; j--) //尋找一連續(xù)的空閑盤塊</p>&l

90、t;p>  if(emptytable.map[m+j-1]==1)</p><p><b>  {</b></p><p><b>  sign=1;</b></p><p><b>  break;</b></p><p><b>  }</b>

91、</p><p>  if(sign==0) break;</p><p><b>  m+=j-1;</b></p><p><b>  sign=0;</b></p><p><b>  }</b></p><p><b>  }&l

92、t;/b></p><p>  if (m <= 10-file[num].Amount)</p><p>  { for(j=0;j < file[num].Amount;j++)</p><p>  emptytable.map[m+j]=1;</p><p>  file[num].i=m;</p>&l

93、t;p><b>  }</b></p><p><b>  else</b></p><p>  printf("沒有足夠的連續(xù)的盤塊數(shù)");</p><p><b>  //寫數(shù)據(jù)</b></p><p>  FILE *fq1;</p>

94、<p>  rewind(fq);</p><p><b>  fq1=fq;</b></p><p>  fseek(fq,(file[i].i) * 512L,0); </p><p>  printf("\n---源文件的起始盤塊號:%d",file[i].i); ////////

95、/////////</p><p>  //rewind(fp1);</p><p>  fseek(fq1,(file[num].i) * 512L,0);</p><p>  printf("\n---復(fù)制文件的起始盤塊號:%d",file[num].i); //////////////////</p><

96、p><b>  char cc;</b></p><p>  printf("\n---源文件內(nèi)容為:---\n");</p><p>  for(int k=0 ; k<file[i].size;k++)</p><p><b>  { </b></p><p>

97、  fseek(fq,(file[i].i) * 512L+k,0); </p><p>  fread(&cc,sizeof(char),1,fq); //////////////////////////////// </p><p>  printf("%c",cc);</p><p>  fseek(f

98、q1,(file[num].i) * 512L+k,0); </p><p>  fwrite(&cc,sizeof(char),1,fq1);</p><p><b>  }</b></p><p>  printf("\n"); </p><p>  num=num+1;</p&

99、gt;<p>  emptytable.filenum=num;</p><p>  WriteFile(); //寫目錄及位示圖</p><p>  fclose(fq);</p><p>  fclose(fq1);</p><p><b>  }<

100、/b></p><p>  void mkfile() //建立一個文件 </p><p>  {struct strNode //數(shù)據(jù)塊</p><p>  {char word[64];</p><p>  struct strNode

101、*next;</p><p>  }*head,*p,*q;</p><p>  char name[9],ext1[4];</p><p>  int i=0,j=0;</p><p>  head=p=q=new struct strNode; //申請結(jié)構(gòu)體內(nèi)存空間</p><p><b>  char

102、 ch;</b></p><p>  printf("請輸入文件內(nèi)容,按 @ 鍵保存且退出!\n");</p><p><b>  do{</b></p><p>  for(i=0;i<64;i++)</p><p><b>  {</b></p>

103、<p>  //ch=getchar();</p><p>  scanf("%c",&ch);</p><p>  p->word[i]=ch;</p><p>  if(ch=='@')break;</p><p><b>  }</b></p&g

104、t;<p>  if(ch!='@')</p><p><b>  {</b></p><p>  p=new struct strNode;</p><p>  q->next=p;</p><p><b>  q=p;</b></p><p

105、><b>  j++;</b></p><p><b>  }</b></p><p>  }while(ch!='@');</p><p>  getchar();</p><p>  int num1, size=(j*64+i)*sizeof(char);</p&g

106、t;<p><b>  ////////</b></p><p>  printf("文件長度為:%d\n",size);</p><p>  char judge='n';</p><p><b>  do{</b></p><p>  print

107、f("請輸入文件的英文名字:");</p><p>  gets(name);</p><p>  //scanf("%s",name);getchar();</p><p>  printf("請輸入文件的擴(kuò)展名:");</p><p>  gets(ext1);</p>

108、;<p>  //scanf("%s",ext1);getchar();</p><p>  if(*ext1=='\0')strcpy(ext1,"txt");</p><p>  judge='y';</p><p>  if(*name=='\0')</

109、p><p><b>  {</b></p><p>  printf("錯誤!文件名不能為空!\n");</p><p>  printf("是否放棄此文件[Y/N] ");</p><p>  scanf("%c",&judge);getchar();&l

110、t;/p><p>  if( (judge=='y') || (judge=='Y') ) </p><p><b>  return;</b></p><p><b>  }</b></p><p>  }while( (judge=='n') || (

111、judge=='N') );</p><p><b>  FILE *fp;</b></p><p>  if((fp=fopen("filesys","r+"))==NULL)</p><p>  {printf("can not open file");</

112、p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  fseek(fp,512l,0);</p><p>  fread(&emptytable,sizeof(struct empty),1,fp);</p><p>

113、;  rewind(fp);</p><p>  num=emptytable.filenum;</p><p>  for(i=0;i<num;i++)</p><p><b>  {</b></p><p>  fread(&file[i],sizeof(struct filename),1,fp);&

114、lt;/p><p>  printf("%s.%s\n",file[i].name,file[i].ext);</p><p><b>  }</b></p><p>  for (i=0;i<num;i++)</p><p><b>  {</b></p>&l

115、t;p>  if( (strcmp(file[i].name,name)==0) && (strcmp(file[i].ext,ext1)==0) )</p><p><b>  {</b></p><p>  printf("! 錯誤 ! 兩個文件名不能相等\n");</p><p><b>

116、;  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  num1=size/512;</p><p>  if((size%512)>0) num1=num1+1;</p><p> 

117、 strcpy(file[num].name,name);</p><p>  strcpy(file[num].ext,ext1);</p><p>  file[num].size = size;</p><p>  file[num].Amount=num1;</p><p>  int sign=0 ,n=0;</p>

118、<p><b>  //空間分配</b></p><p>  for(int m=2 ; m <=10-num1; m++)</p><p>  { if(emptytable.map[m]==0)</p><p><b>  {</b></p><p>  for(n=file

119、[num].Amount; n>0; n--)</p><p>  if(emptytable.map[m+n-1]==1)</p><p><b>  {sign=1;</b></p><p><b>  break;</b></p><p><b>  }</b>&

120、lt;/p><p>  if(sign==0)break;</p><p><b>  m+=n-1;</b></p><p><b>  sign=0;</b></p><p><b>  }</b></p><p><b>  }</b&

121、gt;</p><p>  if(m<=10-num1)</p><p>  file[num].i = m;</p><p><b>  else</b></p><p>  {printf("空間不足!\n");</p><p><b>  return;

122、</b></p><p><b>  }</b></p><p>  for(j=0;j < file[num].Amount;j++)</p><p>  emptytable.map[m+j]=1;</p><p>  num=num+1;</p><p>  emptyta

123、ble.filenum=num;</p><p>  WriteFile();//寫目錄及位示圖</p><p><b>  //寫數(shù)據(jù)</b></p><p>  fseek(fp,file[num-1].i * 512L,0);</p><p>  long int cycle=file[num-1].size;&l

124、t;/p><p>  p=head; i=0;</p><p>  for(j=cycle;j>0;j--)</p><p>  { ch=p->word[i++];</p><p>  fwrite(&ch,sizeof(char),1,fp);</p><p><b>  if(i>

125、;=64)</b></p><p><b>  { i=0;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p>  // cycle--;</p><p><b>  }</b&g

126、t;</p><p>  fclose(fp);</p><p><b>  }</b></p><p>  void mnue() //菜單函數(shù)</p><p>  { printf("\n\n");</p><p>  printf(&qu

127、ot; !!!請選擇一個功能!!!\n");</p><p>  printf(" :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n");</p><p>  printf(" :

128、 1. Init Sysfile. :\n");</p><p>  printf(" : 2. Dir. : \n");</p><p&g

129、t;  printf(" : 3. Create a file. : \n"); </p><p>  printf(" : 4. Type.

130、:\n");</p><p>  printf(" : 5. Copy. : \n");</p><p>  printf(" : 6. Delfile.

131、 :\n");</p><p>  printf(" : 7. Exit. : \n"); </p><p>  printf(" :::::::::::

132、::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n");</p><p><b>  }</b></p><p>  void main()</p><p><b>  { char k;</b></p><p>

133、;<b>  while(1)</b></p><p>  { mnue(); //顯示系統(tǒng)菜單</p><p>  k=getchar();getchar();</p><p>  switch (k)</p><p><b>  {</b></p>&l

134、t;p>  case '1': SystemInit();</p><p><b>  break;</b></p><p>  case '2': dir(); </p><p><b>  break;</b></p><p>  case

135、'3': mkfile(); </p><p><b>  break;</b></p><p>  case '4': type(); </p><p><b>  break;</b></p><p&

136、gt;  case '5': copy(); </p><p><b>  break;</b></p><p>  case '6': delfile(); </p><p><b>  break; </b>

137、;</p><p>  case '7': exit(1); </p><p>  default : printf("error\n");</p><p><b>  exit(0);</b></p><p><b>  }</b>&l

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論