通信學論文-通用子目錄文件顯示方法  .doc_第1頁
通信學論文-通用子目錄文件顯示方法  .doc_第2頁
通信學論文-通用子目錄文件顯示方法  .doc_第3頁
通信學論文-通用子目錄文件顯示方法  .doc_第4頁
通信學論文-通用子目錄文件顯示方法  .doc_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

通信學論文-通用子目錄文件顯示方法在用CHKDS/V對磁盤子目錄及子目錄文件進行查找時,由于輸出顯示信息沒有分屏顯示,很容易錯過需要的信息,并且顯示信息沒有標記出隱藏的子目錄名及子目錄文件名,這樣就對進一步的子目錄及文件操作帶來許多不便。若輔以管道操作采用CHKDSK/V:|MORE,雖然可分屏顯示,但等待輸出時間過長,而且這時_Break中斷被封鎖,效果不盡人意。本文針對于此采用截獲_Break和分屏緩沖輸出技術(shù)實現(xiàn)子目錄和子目錄文件及其屬性的顯示。一、實現(xiàn)原理子目錄和子目錄文件的查找是通過C語言函數(shù)findfirst和findnext采用遞歸算法實現(xiàn)的。子目錄和子目錄文件的屬性是根據(jù)屬性字來判斷。屬性字格式如下圖所示:-|7|6|5|4|3|2|1|0|-第0位(只讀位):取1表示只讀第1位(隱含位):取1表示隱含第2位(系統(tǒng)位):取1表示系統(tǒng)第3位(卷標位):取1表示卷標第4位(子目錄位):取1表示子目錄第5位(歸檔位):取1表示歸檔第6、7位:保留未用在子目錄及子目錄文件查找的遞歸調(diào)用前,保存_Break標記并封鎖_Break中斷,在正常結(jié)束或截獲_Break中斷(或ESC信號)后恢復_Break標記,并恢復指定驅(qū)動器的當前子目錄、當前驅(qū)動器以及當前驅(qū)動器的當前子目錄。在子目錄和子目錄文件的分屏緩沖輸出顯示方面,建立一輸出緩沖區(qū)BUFFER80*25來完成結(jié)果信息的分屏緩沖輸出。二、程序功能本程序功能有分屏顯示指定驅(qū)動器(缺省時為當前驅(qū)動器)、指定目錄(缺省時為當時目錄)中的指定文件(缺省時為*.*)及其所包含的子目錄和子目錄中的指定文件(缺省時為*.*)。對于子目錄顯示其子目錄名及其屬性,對于文件顯示匹配的文件名、長度、建立時間及屬性,最后輸出匹配的文件個數(shù)及所包含的子目錄個數(shù)。在查找過程中可按_Break或ESC鍵退出并返回當前驅(qū)動器及其當前目錄,若指定驅(qū)動器不是當前驅(qū)動器則恢復指定驅(qū)動器的當前目錄。下面舉例說明隱藏子目錄的查找。假定在驅(qū)動器A上建立子目錄TEMP,用PCTOOLS或NORTON工具軟件將其屬性由10改為FF。這樣在DOS狀態(tài)下鍵入CDTEMP,系統(tǒng)會提示出錯。作用CHKDSKA:,系統(tǒng)提示:CannotCHDIRtoA:TEMP,treepastthispointnotprocessed使用本程序,運行結(jié)果認為TEMP為一文件,其屬性為HSRALD,表示這是一個子目錄,可據(jù)此推猜其為一加密子目錄,可進一步用NORTON工具軟件解密。三、實現(xiàn)實例實例是在386兼容機、BORLANDC+3.1集成環(huán)境和DOS6.0操作系統(tǒng)支持下調(diào)試通過,實現(xiàn)源程序附后。需要指出的不足是,由于findfirst與findnext是通過查找目錄項區(qū)實現(xiàn)其功能的,所以對一些與FAT表不符的隱藏文件及子目錄的方法本程序不能奏效,建議結(jié)合CHKDSK使用本程序。另外,本文采用的封鎖_Break的方法適用于查找過程,但在屏幕輸出過程中不能做到封鎖_Break中斷。若需在查、屏幕輸出過程中均封鎖_Break中斷,可采用ctrbrk函數(shù)另建一個_Break中斷服務程序。#include#include#include#include#include#include#include#defineESC27#defineCtrl_Break3#definePAGE_NUMBER22voiddiroperate(void);voidadd_attrib(structffblk);voidfull_screen_operate(void);chardriverMAXDRIVE=,dirMAXDIR=;charfileMAXFILE=,extMAXEXT=charcurdriver,curdirMAXDIR;charolddriver,olddirMAXDIR,workdirMAXDIR;charFN13=*.*;intpage_sum=0,dir_sum=0,file_sum=0;charbuffer80*25;char*buffer_pointer=buffer;charCtrl_Bresk_flag;charattrib7=;main(intargc,char*argv)curdriver=getdisk();getcwd(curdir,MAXDIR);driver0=curdriver+A;if(argc2)printf(Toomuchparameters!n);exit(0)if(argc=2)fnsplit(argv)1,driver,dir,file,ext);if(strcpy(file)!=0)strcpy(file,exr,13);strcpy(FNfile);if(strlen(driver)!=0)setdisk(toupper(driver0)-A)setdisk(toupper(drive0)-A)getcwd(olddir,MAXDIR);strcpy(workdir,dirver);if(strlen(dir)!=0)if(strlen(dir)=1)strcat(workdir,dir,strlen(dir);elsestrncat(workdir,dir,strlen(dir)-1);chdir(workdir);Ctrl_Break_flag=getcbrk();setcbrk(0);dir_operate()pust(buffer);setcbrrk(Ctrl_Break_flag);if(dir_sum-1=0)printf(Nosub_directories.n)elseprintf(%ddirectories.n,dir_sum-1)if(file_sum=0)printf(Nofiles.n)elseprintf(%dfiles.n,file_sum);if(strlen(driver)!=0)chdir(olddir);setdisk(curdriver);chdir(curdir);return(0);voiddir_operate(void)structffblkdirment;intdone,p,byte_num;unsignedintyear,month,date,hourminute;charpathMAXDIR;/*begintosearchallpossiblefiles*/done=findfirst(FN,&dirment,0x2f);getcwd(path,MAXPATH);dir_sum+;page_sum+;if(page_sum=PAGE_NUMBER)full_screen_operate();/*writeDirectorynameanditsattributeintobuffer*/byte_num=sprintf(buffer_pointer,Directory%s,path);buffer_poiner+=byte_unm;byte_unm=sprintf(buffer_pointer,%6sn,attrib);buffer_pointer+=byte_num;while(!done)page_sum+;file_sum+;if(page_sum=PAGE_NUMBER)full_screen_operate();/*writefilenameanditslength,time,attributeintobuffer*/bytp_num=sprintf(buffer_pointer,%20s%8ld,dor,emt.ff_name,dirment.ff_fsize);buffer_pointer+=byte_num;year=(dirment.ff_fdate9&0x7f)+80;month=dirment.ff_fdate5&0xf;date=dirment.ff_fdate&0x1f;hour=dirment.ff_ftime11&0x1f;minute=dirment.ff_ftime5&0x3f;byte_num=sprintf(bufferr_Pointer,%2d-%02d-%2d,month,date,year);buffer_pointer+=byte_num;if(hour=12)byte_num=sprintf(buffer_pointer,%2d:%02dp,hour-12,minute);buffer_pointer+=byte_num;elsebyte_num=sprintf(buffer_pointer,%2d:%2da,hourminute);buffer_pointer+=byte_num;add_attrib(dirment);byte_num_sprintf(buffer_pointer,%6sn,attrib);buffer_pointer+=byte_num;/*continuetosearch*/done-findnext(&dirment);/*begintosearchallpossibleDirectories*/p=findfirst(*.*,&dirment,0x37);/*skipDirectories.and.*/if(!p&dirment.ff_name0=.)p=findnext(&dirment);p=findnext(&dirment);while(!p)/*ifitisdirectory,thenoperateit*/if(-chmod(dirment.ff_name,0)&FA_DIREC)chdir(dirment.ff_name);add_attrib(dirment);/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論