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

下載本文檔

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

文檔簡介

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

2、:計算機(jī)科學(xué)與技術(shù) </p><p><b>  班 級: </b></p><p><b>  指導(dǎo)教師: </b></p><p>  2011年12月30日</p><p><b>  課程設(shè)計任務(wù)書</b></p><p><b>

3、  目錄</b></p><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é)

4、構(gòu)2</p><p>  2.2 程序功能圖3</p><p>  2.3 程序流程圖3</p><p>  第三章 程序運行結(jié)果及分析7</p><p>  3.1 程序運行結(jié)果7</p><p>  3.2 程序分析8</p><p>  第四章 心得體會9</p>

5、<p><b>  參考文獻(xiàn)10</b></p><p>  附錄 程序清單11</p><p><b>  設(shè)計內(nèi)容</b></p><p><b>  1.1 設(shè)計目的</b></p><p>  通過設(shè)計一個小型文件系統(tǒng),進(jìn)一步掌握文件管理的方法和技術(shù),

6、使學(xué)生初步具有研究、設(shè)計、編制和調(diào)試操作系統(tǒng)模塊的能力。</p><p><b>  1.2 設(shè)計要求</b></p><p><b>  (1) 問題描述</b></p><p>  在任一OS下,建立一個大文件,把它假想成一張盤,在其中實現(xiàn)一個簡單的小型文件系統(tǒng)。</p><p><b&g

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

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

9、開始存放各具體文件的內(nèi)容,文件目錄存放文件的名字,文件的擴(kuò)展名,開始盤塊號,所占用的盤塊數(shù)目,文件的大小;盤塊位示圖用來標(biāo)記盤塊是否被占用。</p><p>  構(gòu)造這些實體的關(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&

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

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

12、;  long int size; //文件大小</p><p><b>  };</b></p><p><b>  盤塊結(jié)構(gòu):</b></p><p>  struct empty { //盤塊結(jié)構(gòu)體</p><p>

13、  int map[100]; //盤塊位示圖</p><p>  int filenum; //文件數(shù)量</p><p><b>  }; </b></p><p><b>  2.2 程序功能圖</b></p><p>  文件系統(tǒng)提供

14、的文件操作有建立文件(mkfile)、復(fù)制文件(copy)、顯示文件所有內(nèi)容(type)、刪除文件(delfile)。可以通過鍵盤輸入命令來模擬文件的操作。</p><p><b>  2.3 程序流程圖</b></p><p> ?。?)主程序流程圖:</p><p> ?。?)初始化模塊流程圖:</p><p>  

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

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

17、;<p> ?。?)讀取剛才寫入的文件,結(jié)果正確</p><p> ?。?)刪除剛寫入的文件,測試成功</p><p><b>  3.2 程序分析</b></p><p>  本程序使用一個Windows下的文件來模擬一個磁盤,向磁盤中裝入文件并進(jìn)行相關(guān)操作。采用了以空間換時間的算法,文件的大小在系統(tǒng)中是固定的,雖然會浪費一些空

18、間,但文件的存取速率會加快。</p><p><b>  第四章 心得體會</b></p><p>  操作系統(tǒng)課程設(shè)計是本課程重要的實踐教學(xué)環(huán)節(jié)。課程設(shè)計的目的,一方面使學(xué)生更透徹地理解操作系統(tǒng)的基本概念和原理,使之由抽象到具體;另一方面,通過課程設(shè)計加強(qiáng)學(xué)生的實驗手段與實踐技能,培養(yǎng)學(xué)生獨立分析問題、解決問題、應(yīng)用知識的能力和創(chuàng)新精神。與本課程的實驗教學(xué)相比,課程

19、設(shè)計獨立設(shè)課,具有更多的學(xué)時,給學(xué)生更多自行設(shè)計、自主實驗的機(jī)會,充分放手讓學(xué)生真正培養(yǎng)學(xué)生的實踐動手能力,全面提高學(xué)生的綜合素質(zhì)。</p><p>  在設(shè)計的過程中遇到問題,可以說得是困難重重,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,不過設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時,在老

20、師的身上我學(xué)得到很多實用的知識,再次我表示感謝!同時,對給過我們幫助的所有同學(xué)和各位指導(dǎo)老師再次表示忠心的感謝!</p><p>  在設(shè)計過程中,查詢了不少相關(guān)資料,不斷的發(fā)現(xiàn)問題、提出問題、解決問題。在對自己所編寫的源程序段的糾錯的過程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識,同時在編程時用到了模塊化的設(shè)計思想,這種編程方法可以使我們的編程變的更簡單,可以使我們的查錯與糾錯變的更方便??偟膩碚f通過這次

21、的設(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><b>  1. 教材</b></p>&

22、lt;p>  [1] 張堯?qū)W主編.計算機(jī)操作系統(tǒng)教程(第三版).北京:清華大學(xué)出版社,2006</p><p><b>  2. 主要參考書 </b></p><p>  [1] 張堯?qū)W編.計算機(jī)操作系統(tǒng)教程(第三版)習(xí)題解答與實驗指導(dǎo).北京:清華大學(xué)出版社,2006</p><p>  [2] 湯子瀛主編.計算機(jī)操作系統(tǒng)(第三版).西安

23、:西安電子科技大學(xué)出版社,2001 </p><p>  [3] 張坤等編.操作系統(tǒng)實驗教程.北京:清華大學(xué)出版社,2008</p><p>  [4] 張麗芬等編.操作系統(tǒng)實驗教程.北京:清華大學(xué)出版社,2006</p><p>  [5] Andrew S.Tanenbaum. Modern Operating Systems, Second Edition.E

24、nglewood Cliffs,N.J,Prentice Hall, 2001</p><p>  [6] 屠祁等編.操作系統(tǒng)基礎(chǔ)(第三版).北京:清華大學(xué)出版社,2000</p><p>  [7] 馮耀霖等編.操作系統(tǒng).西安:西安電子科技大學(xué)出版社,2001</p><p>  [8] 左萬歷.計算機(jī)操作系統(tǒng)教程(第二版).北京:高等教育出版社,2004<

25、/p><p><b>  附錄 程序清單</b></p><p>  #include "iostream.h"</p><p>  #include "string"</p><p>  #include "stdio.h"</p><p>

26、;  extern "C" void exit(int);</p><p>  struct filename //文件目錄項結(jié)構(gòu)體 </p><p><b>  {</b></p><p>  char name[12];

27、//文件名</p><p>  char ext[8]; //擴(kuò)展名//擴(kuò)展名較小設(shè)為10</p><p>  int i; //文件所占用磁盤塊的第一個磁盤塊號</p><p>  int Amount; //文件所占用磁盤塊的塊數(shù)</p>

28、;<p>  long int size; //文件大小</p><p>  }file[20];</p><p><b>  int num;</b></p><p>  struct empty //盤塊結(jié)構(gòu)體</p><p>

29、;  { int map[20]; //盤塊位示圖</p><p>  int filenum; //文件數(shù)量</p><p>  }emptytable; </p><p><b>  //模塊說明:</b></p><p>  void S

30、ystemInit() //模擬磁盤文件初始化函數(shù)</p><p><b>  { </b></p><p>  for(int i=2;i<19;i++) { //初始化存放位示圖的盤塊</p><p>  emptytable.map[i]=0;</p&

31、gt;<p><b>  }</b></p><p>  emptytable.map[0]=1;</p><p>  emptytable.map[1]=1;</p><p>  emptytable.filenum=0;</p><p><b>  FILE *fp;</b>&l

32、t;/p><p>  if((fp=fopen("filesys","wb+"))==NULL) //wb+:為讀寫建立一個"新"文件;打開系統(tǒng)文件將文件目錄盤塊和用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。+: 讀和寫</p><p> 

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

34、t;p>  fseek(fp,512L,0); // int fseek(FILE *stream, long offset, int fromwhere); 函數(shù)設(shè)置文件指針stream的位置。如果執(zhí)行成功,stream將指向以fromwhere(偏移起始位置:文件頭0,當(dāng)前位置1,文件尾2)為基準(zhǔn),偏移offset(指針偏移量)個字節(jié)的位置。如果執(zhí)行失敗(offset超過文件自身大小),則不改變stream指向

35、的位置。成功,返回0,否則返回其他值。</p><p>  fwrite(&emptytable,sizeof(struct empty),1,fp); //把結(jié)構(gòu)體emptyable中的內(nèi)容寫入到fp中,數(shù)據(jù)項的大小為struct empty,數(shù)據(jù)項的個數(shù)為1</p><p>  fclose(fp);</p><p>  printf("

36、!!!初始化系統(tǒng)成功!!!");</p><p><b>  }</b></p><p>  void WriteFile() //將目錄以及空閑盤塊表寫入磁盤</p><p>  { </p><p><b>  FIL

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

38、><b>  exit(0);</b></p><p><b>  }</b></p><p>  rewind(fp); //將文件內(nèi)部的位置指針重新指向一個流(數(shù)據(jù)流/文件)的開頭</p><p>  for(int i=0;i<num;i++)</p><p><b&

39、gt;  {</b></p><p>  fwrite(&file[i],sizeof(struct filename),1,fp); //文件目錄</p><p><b>  }</b></p><p>  fseek(fp,512L,0);</p><p>  fwrite(&em

40、ptytable,sizeof(struct empty),1,fp); //位示圖</p><p>  fclose(fp);</p><p><b>  }</b></p><p>  void dir() //顯示文件目錄</p>

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

42、</p><p><b>  exit(0);</b></p><p><b>  } </b></p><p>  fseek(fp,512L,0); //空閑盤塊表的定位</p><p>  fread(&emptyta

43、ble,sizeof(struct empty),1,fp);</p><p>  rewind(fp); //文件目錄表的定位</p><p>  num=emptytable.filenum;</p><p>  for(i=0;i<num;i++)</p><

44、;p>  fread(&file[i],sizeof(struct filename),1,fp);</p><p>  if (num!=0)</p><p>  { printf("系統(tǒng)所有文件:\n");</p><p>  for(i=0,j=1;i<num;i++,j++)</p><p>&

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

46、b>  j=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n文件數(shù)量為 %d ",num);</p>

47、<p>  fclose(fp);</p><p><b>  }</b></p><p>  void type() //顯示文件內(nèi)容</p><p><b>  { </b></p><p><b>

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

49、;/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&

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

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

52、  char name[12],ext1[8];</p><p>  printf("請輸入所要查詢的文件名:\n");</p><p>  gets(name); //scanf("%s",name);//getchar(); </p><p>  printf("請輸入擴(kuò)展名:");<

53、;/p><p>  gets(ext1); //scanf("%s",ext1);getchar();</p><p>  if(*(name+0)=='\0')</p><p><b>  {</b></p><p>  printf("文件名不能為空 ! \n&qu

54、ot;);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(*ext1=='\0') </p><p>  strcpy(ext1,"txt");</p><p> 

55、 int sign=0;</p><p>  for(i=0;i<num;i++)</p><p>  if((strcmp(file[i].name,name)==0) && (strcmp(file[i].ext,ext1)==0))</p><p>  { printf("---所找文件為第%d個文件----\n&qu

56、ot;,i+1); </p><p><b>  sign=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(sign==0)</p><p>  { printf(&q

57、uot;無此文件\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  //顯示文件</b></p><p>  int b,m,n ;</p><p>  b=fil

58、e[i].i;</p><p>  n=file[i].size;</p><p>  printf("---該文件位于第%d塊\n",b+1); </p><p>  printf("---從文件讀出的文件長度為:%d---\n",n);</p><p>  /

59、/fseek(fp,b*512L,0);</p><p><b>  char cc;</b></p><p>  printf("---文件內(nèi)容為:---\n");</p><p>  printf(""); </p><p>  for( m=0,j=1; m&l

60、t;n; m++,j++) </p><p><b>  { </b></p><p>  fseek(fp,b*512L+m,0);</p><p>  //fread(&cc,sizeof(char),1,fp); </p><p>  cc=fgetc(fp);

61、 </p><p>  printf("%c",cc);</p><p>  if(j%40==0)printf("\n");</p><p><b>  }</b></p><p>  printf("\n"); </p><p&

62、gt;  fclose(fp);</p><p><b>  }</b></p><p>  void delfile() //刪除一個文件</p><p><b>  { </b></p><p><b>

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

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

65、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 filename),1,fp);<

66、/p><p>  char name[12],ext1[8];</p><p>  printf("請輸入文件名:\n");</p><p>  gets(name);</p><p>  //scanf("%s",name);getchar();</p><p>  printf(

67、"請輸入擴(kuò)展名:\n");</p><p>  gets(ext1);</p><p>  //scanf("%s",ext1);getchar();</p><p>  if(*name=='\0'){</p><p>  printf("文件名不能為空 ! \n&quo

68、t;); </p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(*ext1=='\0') strcpy(ext1,"txt");</p><p>  char judge;</p>

69、<p>  printf("是否刪除文件%s.%s [y/n]",name,ext1);</p><p>  scanf("%c",&judge); getchar();</p><p>  if((judge=='y')||(judge=='Y'))</p><p> 

70、 printf("準(zhǔn)備刪除文件%s.%s !\n",name,ext1);</p><p>  else if((judge=='n')||(judge=='N')) return;</p><p><b>  else</b></p><p><b>  {</b>&

71、lt;/p><p>  printf("系統(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+

72、+){</p><p>  if((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&

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

74、lt;b>  return; </b></p><p><b>  }</b></p><p><b>  //回收空間</b></p><p>  int b=file[i].i;</p><p>  int Amount=file[i].Amount;</p>

75、<p><b>  int j;</b></p><p>  for(j=0;j<Amount;j++)</p><p>  emptytable.map[b++]=0;</p><p>  for( j=i;j<num-1;j++)</p><p><b>  { </b>

76、</p><p>  strcpy(file[j].name,file[j+1].name);</p><p>  strcpy(file[j].ext,file[j+1].ext);</p><p>  file[j].i=file[j+1].i;</p><p>  file[j].size=file[j+1].size;</p&g

77、t;<p>  file[j].Amount=file[j+1].Amount;</p><p><b>  }</b></p><p>  emptytable.filenum=emptytable.filenum-1;</p><p>  num=emptytable.filenum;</p><p>

78、  WriteFile();</p><p>  printf("刪除成功!\n");</p><p>  fclose(fp);</p><p><b>  }</b></p><p>  void copy() //復(fù)制

79、一個文件</p><p><b>  { </b></p><p><b>  FILE *fq;</b></p><p>  int i,j,sign;</p><p>  if((fq=fopen("filesys","rb+"))==NULL){&l

80、t;/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><p>  fr

81、ead(&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[i],sizeof

82、(struct filename),1,fq);</p><p><b>  }//for</b></p><p>  char SourceName[12],DestName[12],ext1[8],ext2[8];</p><p>  printf("請輸入源文件名:");</p><p>  g

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

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

85、;</p><p>  gets(ext2); getchar(); //scanf("%s",ext2);getchar();</p><p>  if(*ext2=='\0') strcpy(ext2,"txt");</p><p>  if((*SourceName)

86、=='\0' || (*DestName)=='\0'){</p><p>  printf("錯誤! 文件名不能為空!\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if

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

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

89、<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;</p><p>  break;

90、 </p><p><b>  }</b></p><p><b>  }//for </b></p><p>  if(sign==0)</p><p><b>  { </b></p>

91、<p>  printf("不存在源文件\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if (i<num)</p><p>  printf("輸入的文件名與第%d個源文件相

92、等(i從0開始)\n",i); </p><p><b>  //空間分配</b></p><p><b>  sign=0;</b></p><p>  for(int m=2 ; m<=19-file[num].Amount ; m++) //********************</p

93、><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>

94、<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>  }//if<

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

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

97、lt;p>  file[num].i=m;</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("沒有足夠的連續(xù)的盤塊數(shù)");</p><p><b>  //寫數(shù)據(jù)</b></

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

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

100、lt;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&

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

102、 </p><p>  fwrite(&cc,sizeof(char),1,fq1);</p><p><b>  }</b></p><p>  printf("\n"); </p><p>  num=num+1;</p><p>  emptytable.fil

103、enum=num;</p><p>  WriteFile(); //寫目錄及位示圖</p><p>  fclose(fq);</p><p>  fclose(fq1);</p><p><b>  }</b></p><p>  v

104、oid mkfile() //建立一個文件 </p><p>  {FILE *fp;</p><p>  if((fp=fopen("filesys","r+"))==NULL){</p><p>  printf("can no

105、t open file\npleace Initialization at first\n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  struct strNode //數(shù)據(jù)塊</p><p>  {ch

106、ar word[64];</p><p>  struct strNode *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 strNod

107、e; //申請結(jié)構(gòu)體內(nèi)存空間</p><p><b>  char ch;</b></p><p>  printf("請輸入文件內(nèi)容,按 @ 鍵保存且退出!\n");</p><p><b>  do{</b></p><p>  for(i=0;i<64;i++)<

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

109、lt;/p><p><b>  }</b></p><p>  if(ch!='@')</p><p><b>  {</b></p><p>  p=new struct strNode;</p><p>  q->next=p;</p>&

110、lt;p><b>  q=p;</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p>  }while(ch!='@');</p><p>  getchar();</p><p&

111、gt;  int num1, size=(j*64+i)*sizeof(char); //j為結(jié)構(gòu)體的個數(shù),i為不足一個結(jié)構(gòu)體的字符數(shù)</p><p><b>  ////////</b></p><p>  printf("文件長度為:%d\n",size);</p><p>  char judge='n&#

112、39;;</p><p><b>  do{</b></p><p>  printf("請輸入文件的英文名字:");</p><p>  gets(name);</p><p>  //scanf("%s",name);getchar();</p><p>

113、;  printf("請輸入文件的擴(kuò)展名:");</p><p>  gets(ext1);</p><p>  //scanf("%s",ext1);getchar();</p><p>  if(*ext1=='\0') strcpy(ext1,"txt");</p>&l

114、t;p>  judge='y';</p><p>  if(*name=='\0')</p><p><b>  {</b></p><p>  printf("錯誤!文件名不能為空!\n");</p><p>  printf("是否放棄此文件[Y/N

115、] ");</p><p>  scanf("%c",&judge);getchar();</p><p>  if( (judge=='y') || (judge=='Y') ) </p><p><b>  return;</b></p><p>

116、<b>  }</b></p><p>  }while( (judge=='n') || (judge=='N') );</p><p>  fseek(fp,512L,0);</p><p>  fread(&emptytable,sizeof(struct empty),1,fp);</p&g

117、t;<p>  rewind(fp);</p><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

118、("%s.%s\n",file[i].name,file[i].ext);</p><p><b>  }*/</b></p><p>  for (i=0;i<num;i++){</p><p>  if((strcmp(file[i].name,name)==0) && (strcmp(file[i

119、].ext,ext1)==0)){</p><p>  printf("! 錯誤 ! 兩個文件名不能相同\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p

120、><p>  num1=size/512;</p><p>  if((size%512)>0) num1=num1+1;</p><p>  strcpy(file[num].name,name);</p><p>  //printf("%d%s%s",num,file[num].name,name);</

121、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><p><b>  //空間分配</b&g

122、t;</p><p>  for(int m=2 ; m <=10-num1; m++){ //****************************</p><p>  if(emptytable.map[m]==0){ </p><p>  for(n=file[num].Amount; n>0; n--){</p>

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

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

125、lt;b>  }//for</b></p><p>  if(m<=10-num1)</p><p>  file[num].i = m; //***********************************************</p><p>  else

126、 </p><p><b>  {</b></p><p>  printf("空間不足!\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p&

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

128、<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;</p><p>  p=head

129、; 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>=64)</b></p>

130、<p><b>  { i=0;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p>  // cycle--;</p><p><b>  }</b></p><p>  re

131、wind(fp);</p><p>  for(j=0,i=0;i<num;i++,j++){</p><p>  //printf("斷點%d\n",i);</p><p>  fread(&file[i],sizeof(struct filename),1,fp);</p><p>  //printf(

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

133、p>  fclose(fp);</p><p><b>  }</b></p><p>  void rename(){</p><p><b>  FILE *fp;</b></p><p>  if((fp=fopen("filesys","rb+"

134、))==NULL){</p><p>  printf("can not open file\npleace Initialization at first\n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p> 

135、 char sourse[12],sext[8],object[12],oext[8];</p><p>  int num,sign;</p><p>  printf("請輸入需要重命名的文件名和擴(kuò)展名:\n");</p><p>  gets(sourse);</p><p>  gets(sext);</p

136、><p>  printf("請輸入新的名字和擴(kuò)展名:\n");</p><p>  gets(object);</p><p>  gets(oext);</p><p>  fseek(fp,512L,0);</p><p>  fread(&emptytable,sizeof(struct

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

138、;/p><p><b>  }</b></p><p><b>  sign = 0;</b></p><p>  for( i = 0;i<num;i++){</p><p>  if((strcmp(file[i].name,sourse)==0) && (strcmp(fil

139、e[i].ext,sext)==0)){</p><p><b>  sign = 1;</b></p><p>  strcpy(file[i].name,object);</p><p>  if(*oext == '\0')</p><p>  strcpy(file[i].ext,file[i]

140、.ext);</p><p><b>  else</b></p><p>  strcpy(file[i].ext,oext);</p><p><b>  break;</b></p><p><b>  }//if</b></p><p><

溫馨提示

  • 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

提交評論