




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)課程設(shè)計報告作者:半童合肥工業(yè)大學(xué)獨立之精神,自由之思想!PAGEPAGE14一.題目:Windows命令接口之文件與目錄命令二.設(shè)計任務(wù),要求,目的:1.設(shè)計任務(wù):(1) 為Windows操作系統(tǒng)建立兼容的DOS命令接口,文件與目錄命令(2) 具體命令:DIR,RD,CD,MD,DEL,MOVE,REN,XCOPY,命令格式可參考Windows的CMD.EXE或MS-DOS提供的命令格式設(shè)計命令的名稱,參數(shù)等格式可以字符形式接受命令,執(zhí)行命令,然后顯示命令執(zhí)行結(jié)果操作系統(tǒng)接口:Windows命令接口。(3人)4分為Windows操作系統(tǒng)建立兼容的DOS命令接口,文件與目錄命令;具體命令:DIR,RD,CD,MD,DEL,MOVE,REN,COPY,XCOPY,CLS,DATE,TIME,SORT,TYPE,重定向命令>,<.,|,MORE,命令格式可參照Windows的CMD.EXE或MS-DOS提供的命令;設(shè)計命令的名稱、參數(shù)等格式??梢宰址问浇邮彰?,執(zhí)行命令,然后顯示命令執(zhí)行結(jié)果;2.設(shè)計要求及目的:(1)能夠正確顯示一個目錄里面的子目錄和文件dir(2)能夠刪除一個空目錄rd(3)能夠打開一個存在的目錄cd(4)能夠建立一個空目錄md(5)能夠刪除一個文件del(6)能夠移動一個目錄或文件move(7)能夠重命名一個目錄或文件ren(8)能夠拷貝整個目錄copy(內(nèi)部,不能復(fù)制文件夾下的文件)(9)能夠拷貝整個目錄xcopy(外部,不能連接文件)三:開發(fā)環(huán)境:PC機一臺386以上VC++6.0實現(xiàn)語言:C四:原理及算法描述:1.基本原理: 用戶利用聯(lián)機命令接口實現(xiàn)與機器的交互時,先在終端的鍵盤上打入所需的命令,由終端處理程序接受該命令,并將它顯示在終端屏幕上。當(dāng)一條命令輸入完后,由命令解釋程序?qū)γ钸M行分析,然后執(zhí)行相應(yīng)命令的處理程序。2.算法描述:(1)存貯輸入的各命令參數(shù)voidstore_parameter(char*buffer,char*parameter[10],int*para_num)說明:將輸入的命令一條一條存儲parameter[10]中,最大允許的參數(shù)個數(shù)為10個。算法描述:為buffer設(shè)置一個指針buffer_point,如果該指針向下移動,碰到空格,繼續(xù)向下移動,直到遇到字符,讀進各存儲變量中parameter[10],最后如果遇到’\0’,則結(jié)束。(2)瀏覽一個路徑下的目錄和文件voidmy_dir(char*a[],int*num)說明:該命令只能顯示當(dāng)前目錄中的文件和子目錄和當(dāng)前目錄中子目錄中的文件和子目錄。并無如Windows中命令參數(shù)如此豐富。主要是考慮其復(fù)雜性,予以簡化了。算法描述:如果只接受到mydir命令,后面并無其他參數(shù)時,顯示當(dāng)前目錄下文件和子目錄。如果接受到兩個參數(shù),如果第二個參數(shù)(表示當(dāng)前目錄中子目錄)存在,則顯示該目錄下文件和子目錄,如果不存在,則報錯。(3)刪除一個存在的目錄,如果不存在,刪除失敗!voidmy_rd(char*a[],int*num)算法描述:如果該目錄存在且為空目錄,則刪除,否則失敗。(4)打開一個存在的目錄,如果不存在,打開失敗!voidmy_cd(char*a[],int*num)算法描述:如果接受到兩個參數(shù),第二個參數(shù)表示要打開的目錄。如果該目錄存在,則成功,否則失敗。(5)創(chuàng)建一個目錄voidmy_md(char*a[],int*num) 算法描述:如果接受到兩個參數(shù),第二個參數(shù)表示要建立的目錄。如果存在該目錄,失敗,否則成功。(6)刪除一個存在的文件,如果不存在,刪除文件失敗!voidmy_del(char*a[],int*num)算法描述:如果接受到兩個參數(shù),第二個參數(shù)表示要刪除的文件。如果該文件存在,則刪除成功,否則失敗。(7)移動一個存在的文件,否則,移動失敗voidmy_move(char*a[],int*num)算法描述:如果接受到三個參數(shù),其中第二個參數(shù)表示存在的文件或目錄,第三個參數(shù)表示將要移動到的參數(shù)。如果第二個參數(shù)不存在,則失敗,存在,成功。(8)重命名一個已經(jīng)存在的文件,否則,重命名失敗!voidmy_ren(char*a[],int*num)算法描述:如果接受到三個參數(shù),其中第二個參數(shù)表示將要重命名的目錄或文件,第三個參數(shù)表示將要重命名的新的名字。(9)拷貝文件voidmy_xcopy(char*a[],int*num)算法描述:如果接受到三個參數(shù),其中第二個參數(shù)表示存在的目錄或文件,第三個表示將要拷貝成的目錄或文件。(10)退出,后面可帶退出參數(shù)voidmy_exit(char*a[],int*num)算法描述:可以接受小于10個的參數(shù),其中第一個參數(shù)表示退出。后面幾個參數(shù)一起表示輸出的信息。五.重要算法及設(shè)計思路描述:1.本課程設(shè)計調(diào)用到的API函數(shù)有: (1)typedefstruct_WIN32_FIND_DATA{ DWORDdwFileAttributes; FILETIMEftCreationTime; FILETIMEftLastAccessTime; FILETIMEftLastWriteTime; DWORDnFileSizeHigh; DWORDnFileSizeLow; DWORDdwOID; TCHARcFileName[MAX_PATH]; }WIN32_FIND_DATA;該結(jié)構(gòu)存放著所找到文件的詳細(xì)信息,通過第一個字段,我們可以判斷找到的文件是目錄還是文件,通過cFileName可以獲得該文件的文件名,繼而可以對找到的文件進行操作。(2)HANDLEFindFirstFile(LPCTSTRlpFileName,LPWIN32_FIND_DATAlpFindFileData);根據(jù)文件名查找文件,如執(zhí)行成功,返回一個搜索句柄。如果出錯,返回一個INVALID_HANDLE_VALUE常數(shù)。應(yīng)該用FindClose函數(shù)關(guān)閉這個句柄。(3)BOOLFindNextFile(HANDLEhFindFile,LPWIN32_FIND_DATAlpFindFileData);該函數(shù)根據(jù)調(diào)用FindFirstFile函數(shù)返回的句柄查找下一個文件,返回值非零表示成功,零表示失敗。如不再有與指定條件相符的文件,會將GetLastError設(shè)置成ERROR_NO_MORE_FILES。(4)BOOLFindClose(HANDLEhFindFile);該函數(shù)用來關(guān)閉FindFirstFile函數(shù)創(chuàng)建的一個搜索句柄。 (5)HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDispostion,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);該函數(shù)創(chuàng)建,打開,或截取一個文件。它返回一個對象訪問句柄。也可以返回和打開一個目錄句柄。 (6)BOOLGetFileTime(HANDLEhFile,LPFILETIMElpCreationTime, LPFILETIMElpLastAccessTime,LPFILETIMElpLastWriteTime);該函數(shù)得到一個文件創(chuàng)建,最近訪問,最近修改日期,時間。(7)GetCurrentDirectory(DWORDnBufferLength,LPWSTRlpBuffer);該函數(shù)得到當(dāng)前目錄,存放在lpBuffer中。(8)BOOLRemoveDirectory(LPCTSTRlpPathName);該函數(shù)一個存在的空目錄。(9)BOOLSetCurrentDirectory(LPCWSTRlpPathName);該函數(shù)設(shè)置當(dāng)前目錄。(10BOOLCreateDirectory(LPCTSTRlpPathName,LPSECURITY_ATTRIBUTESlpSecurityAttributes);該函數(shù)創(chuàng)建一個新目錄。如果該文件存在,創(chuàng)建失敗。(11)BOOLDeleteFile(LPCTSTRlpFileName);該函數(shù)刪除一個存在的文件。(12)BOOLMoveFile(LPCTSTRlpExistingFileName,LPCTSTRlpNewFileName);該函數(shù)移動或重命名一個文件或目錄(不管這個目錄里是否由子目錄或文件)。(13)BOOLCopyFile(LPCTSTRlpExistingFileName,LPCTSTRlpNewFileName,BOOLbFailIfExists);該函數(shù)拷貝一個存在的文件或新文件。2.重要算法:其實談不上重要算法,只是對上述API函數(shù)的活學(xué)活用而已。其中我的my_dir(char*a[],int*num)函數(shù)要稍微復(fù)雜點。其中涉及到一個文件或目錄時間日期的獲取和轉(zhuǎn)換,這點是需要注意的。在源程序中,我已經(jīng)給出詳細(xì)的注解。還有,最后結(jié)束時得關(guān)閉創(chuàng)建文件的句柄和搜索句柄。這點非常重要。流程圖:開始開始輸入一個完整的命令parameter[0]==”mydir”or“MYDIR”執(zhí)行my_dir()函數(shù)parameter[0]==”myrd”or“MYRD”執(zhí)行my_rd()函數(shù)parameter[0]==”mycd”or”MYCD”執(zhí)行my_cd()函數(shù)parameter[0]==”mymd”or”MYMD”執(zhí)行my_md()函數(shù)parameter[0]==”mydel”or”MYDEL”執(zhí)行my_del()函數(shù)parameter[0]==”mymove”or”MYMOVE”執(zhí)行my_move()函數(shù)parameter[0]==”myren”or”MYREN”執(zhí)行my_ren()函數(shù)parameter[0]==”myxcopy”or”MYXCOPY”執(zhí)my_xcopy()函數(shù)parameter[0]==”myexit”or”MYEXIT”執(zhí)行my_exit()函數(shù)返回當(dāng)前目錄存儲各命令參數(shù) 流程圖六.程序清單:#include<stdio.h>#include<string.h>#include<conio.h>#include<windows.h>//****************************************************************************************//存貯輸入的各命令參數(shù)voidstore_parameter(char*buffer,char*parameter[10],int*para_num){ char*buffer_point=buffer; for((*para_num)=0;*buffer_point!='\0'&&(*para_num)<10;(*para_num)++) { parameter[(*para_num)]=(char*)malloc(64*sizeof(char)); intj=0; //如果為空格,指針繼續(xù)移進 while(*buffer_point=='') { buffer_point++; } //如果不是空格,讀進變量存儲區(qū) while(*buffer_point!=''&&*buffer_point!='\0') { *(parameter[(*para_num)]+j)=*buffer_point; buffer_point++; j++; } *(parameter[(*para_num)]+j)='\0'; }}//*************************************************************************************//瀏覽一個路徑下的目錄和文件voidmy_dir(char*a[],int*num){ HANDLE obj_handle; char*lpFileName=(char*)malloc(64*sizeof(char)); char*next_dir=(char*)malloc(64*sizeof(char)); WIN32_FIND_DATAfind_file,fd; FILETIMElpCreationTime,lpLastAccessTime,lpLastWriteTime;//創(chuàng)建時間,最近訪問時間,最近修改時間 SYSTEMTIMEsystime;//定義系統(tǒng)時間 //瀏覽當(dāng)前目錄文件 if((*num)==1) { //獲取當(dāng)前目錄 GetCurrentDirectory(64,lpFileName); strcat(lpFileName,"\\*.*"); obj_handle=FindFirstFile(lpFileName,&find_file);//obj_handle初始化 if(obj_handle!=INVALID_HANDLE_VALUE) { do { HANDLEobj_dir=CreateFile(find_file.cFileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_DELETE\ |FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL); if(GetFileTime(obj_dir,&lpCreationTime,&lpLastAccessTime,&lpLastWriteTime)) { FILETIMEtemp_time; FileTimeToLocalFileTime(&lpLastWriteTime,&temp_time);//轉(zhuǎn)換成本地時間 FileTimeToSystemTime(&temp_time,&systime);//轉(zhuǎn)換成系統(tǒng)時間格式 } printf("%d/%d/%d",systime.wYear,systime.wMonth,systime.wDay);//年月日 printf("%d:%d:%d",systime.wHour,systime.wMinute,systime.wSecond);//時分秒 printf("%s\n",find_file.cFileName);// CloseHandle(obj_dir); }while(FindNextFile(obj_handle,&find_file)); } FindClose(obj_handle); } //瀏覽其中目錄文件 elseif((*num)==2) { GetCurrentDirectory(64,lpFileName); //打開其中的某一個目錄 if(!SetCurrentDirectory(a[1])) printf("瀏覽目錄失敗,可能沒有此目錄!\n");else { GetCurrentDirectory(64,next_dir); strcat(next_dir,"\\*.*"); } obj_handle=FindFirstFile(next_dir,&fd);//obj_handle初始化 if(obj_handle!=INVALID_HANDLE_VALUE) { do { HANDLEobj_dir=CreateFile(find_file.cFileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_DELETE\ |FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL); if(GetFileTime(obj_dir,&lpCreationTime,&lpLastAccessTime,&lpLastWriteTime)) { FILETIMEtemp_time;//臨時變量 FileTimeToLocalFileTime(&lpLastWriteTime,&temp_time); FileTimeToSystemTime(&temp_time,&systime);//轉(zhuǎn)換成系統(tǒng)時間 } printf("%d/%d/%d",systime.wYear,systime.wMonth,systime.wDay);//年月日 printf("%d:%d:%d",systime.wHour,systime.wMinute,systime.wSecond);//時分秒 printf("%s\n",find_file.cFileName);// CloseHandle(obj_dir); }while(FindNextFile(obj_handle,&find_file)); } FindClose(obj_handle); //返回上一個目錄 SetCurrentDirectory(lpFileName); } //參數(shù)個數(shù)大于等于3,警告錯誤 elseif((*num)>=3) printf("語法格式不正確!\n");}//刪除一個存在的目錄,如果不存在,刪除失敗!voidmy_rd(char*a[],int*num){ if((*num)==2) { if(!RemoveDirectory(a[1])) printf("刪除目錄失敗,可能沒有此目錄!\n");else printf("刪除目錄成功!\n"); } elseif((*num)==1) { printf("正確語法格式為:\n"); printf("\tmyrddirectory\n"); } else printf("語法格式不正確!\n");}//打開一個存在的目錄,如果不存在,打開失敗!voidmy_cd(char*a[],int*num){ if((*num)==2) { if(!SetCurrentDirectory(a[1])) printf("打開目錄失敗,可能沒有此目錄!\n");else printf("打開目錄成功!\n"); } elseif((*num)==1) { printf("正確語法格式為:\n"); printf("\tmycddirectory\n"); } else printf("語法格式不正確!\n");}//創(chuàng)建一個目錄voidmy_md(char*a[],int*num){ if((*num)==2) { if(!CreateDirectory(a[1],NULL)) printf("創(chuàng)建新目錄失敗!\n"); else printf("創(chuàng)建新目錄成功\n"); }elseif((*num)==1) { printf("正確語法格式為:\n"); printf("\tmymddirectory\n"); } else printf("語法格式不正確!\n");}//刪除一個存在的文件,如果不存在,刪除文件失敗!voidmy_del(char*a[],int*num){ if((*num)==2) { if(!DeleteFile(a[1])) printf("刪除文件失敗!\n");else printf("刪除文件成功!\n"); } elseif((*num)==1) { printf("正確語法格式為:\n"); printf("\tmydelfile\n"); } else printf("語法格式不正確!\n");}//移動一個存在的文件,否則,移動失敗voidmy_move(char*a[],int*num){ if((*num)==3) { if(!MoveFile(a[1],a[2])) printf("移動文件失敗,文件可能不存在!\n"); else printf("文件移動成功!\n"); } elseif((*num)==1) { printf("正確語法格式為:\n"); printf("\tmymovefile\n"); } else printf("語法格式不正確!\n");}//重命名一個已經(jīng)存在的文件,否則,重命名失敗!voidmy_ren(char*a[],int*num){ if((*num)==3) { if(!MoveFile(a[1],a[2])) printf("重命名文件失敗,文件可能不存在!\n"); else printf("重命名文件成功!\n"); } elseif((*num)==1) { printf("正確語法格式為:\n"); printf("\tmyrenfile\n"); } else printf("語法格式不正確!\n");}//拷貝文件voidmy_xcopy(char*a[],int*num){ if((*num)==3) { if(!CopyFile(a[1],a[2],1)) printf("拷貝文件失敗,文件可能不存在!\n"); elseprintf("拷貝文件成功!\n"); } elseif((*num)==1) { printf("正確語法格式為:\n"); printf("\tmyxcopyfile\n"); } else printf("語法格式不正確!\n");}//退出,后面可帶退出參數(shù)voidmy_exit(char*a[],int*num){ inti; for(i=1;i<(*num);i++) printf("%s",a[i]); printf("\n"); exit(1);}//****************************************************************************************//主程序//****************************************************************************************intmain(){ printf("\t=================================================\n");// printf("\t*這是朱強的文件和目錄操作系統(tǒng)課程設(shè)計!*\n");// printf("\t*OPERATINGORDER*\n");// printf("\t*瀏覽文件和目錄:mydir*\n");// printf("\t*刪除目錄:myrd*\n");// printf("\t*打開目錄:mycd*\n");// printf("\t*建立目錄:mymd*\n");// printf("\t*刪除文件:mydel*\n");// printf("\t*移動文件:mymove*\n");// printf("\t*重命名文件:myren*\n");// printf("\t*拷貝文件:myxcopy*\n");// printf("\t*退出:myexit*\n");// printf("\t=================================================\n");// printf("\n"); //獲取當(dāng)前路徑 char*current_path=(char*)malloc(64*sizeof(char)); GetCurrentDirectory(64,current_path); printf("%s-->",current_path); while(1) { //定義一個輸入命令緩沖區(qū),存儲輸入的一個或多個命令參數(shù) char*buffer=(char*)malloc(1024*sizeof(char)); //存放具體輸入的各命令參數(shù),參數(shù)最大數(shù)目為10 char*parameter[10]; //存放參數(shù)個數(shù) int*para_num=(int*)malloc(sizeof(int)); //輸入命令 gets(buffer); //將buffer中各參數(shù)存儲到paremeter中 store_parameter(buffer,parameter,para_num); //解釋各命令,并執(zhí)行! if(strcmp(parameter[0],"mydir")==0||strcmp(parameter[0],"MYDIR")==0) { my_dir(parameter,para_num); gotoback_currentdirectory; } elseif(strcmp(parameter[0],"myrd")==0||strcmp(parameter[0],"MYRD")==0) { my_rd(parameter,para_num); gotoback_currentdirectory; } elseif(strcmp(parameter[0],"mycd")==0||strcmp(parameter[0],"MYCD")==0) { my_
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江國企招聘2025紹興市城北物業(yè)經(jīng)營管理有限公司招聘8人筆試參考題庫附帶答案詳解
- 航天器電推進系統(tǒng)與離子發(fā)動機考核試卷
- 煤氣化技術(shù)的創(chuàng)新與優(yōu)化考核試卷
- 眼鏡店隱形眼鏡配適考核試卷
- 管道配件在智能家居中的應(yīng)用考核試卷
- 市場營銷與寵物護理服務(wù)考核試卷
- 電氣設(shè)備的繼電保護與控制考核試卷
- 染整企業(yè)品牌形象塑造與傳播策略實施考核試卷
- 廊坊會計考試試題及答案
- 考試試題中考數(shù)學(xué)及答案
- 《軍隊政治工作手冊》出版
- 2023年科技特長生招生考試試卷word
- GB/T 6283-2008化工產(chǎn)品中水分含量的測定卡爾·費休法(通用方法)
- 液化天然氣接收站安全管理規(guī)定
- GB/T 23468-2009墜落防護裝備安全使用規(guī)范
- 影像診斷與手術(shù)后符合率統(tǒng)計表
- 2023年北京亦莊國際投資發(fā)展有限公司招聘筆試題庫及答案解析
- ansys電磁場分析經(jīng)典教程
- 美國數(shù)學(xué)競賽AMC8講座課件
- 2020年國家義務(wù)教育質(zhì)量測查德育科目模塊一模擬試題含參考答案
- 導(dǎo)管固定-PPT課件
評論
0/150
提交評論