通信学论文-通用子目录文件显示方法  .doc_第1页
通信学论文-通用子目录文件显示方法  .doc_第2页
通信学论文-通用子目录文件显示方法  .doc_第3页
通信学论文-通用子目录文件显示方法  .doc_第4页
通信学论文-通用子目录文件显示方法  .doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信学论文-通用子目录文件显示方法在用CHKDS/V对磁盘子目录及子目录文件进行查找时,由于输出显示信息没有分屏显示,很容易错过需要的信息,并且显示信息没有标记出隐藏的子目录名及子目录文件名,这样就对进一步的子目录及文件操作带来许多不便。若辅以管道操作采用CHKDSK/V:|MORE,虽然可分屏显示,但等待输出时间过长,而且这时_Break中断被封锁,效果不尽人意。本文针对于此采用截获_Break和分屏缓冲输出技术实现子目录和子目录文件及其属性的显示。一、实现原理子目录和子目录文件的查找是通过C语言函数findfirst和findnext采用递归算法实现的。子目录和子目录文件的属性是根据属性字来判断。属性字格式如下图所示:-|7|6|5|4|3|2|1|0|-第0位(只读位):取1表示只读第1位(隐含位):取1表示隐含第2位(系统位):取1表示系统第3位(卷标位):取1表示卷标第4位(子目录位):取1表示子目录第5位(归档位):取1表示归档第6、7位:保留未用在子目录及子目录文件查找的递归调用前,保存_Break标记并封锁_Break中断,在正常结束或截获_Break中断(或ESC信号)后恢复_Break标记,并恢复指定驱动器的当前子目录、当前驱动器以及当前驱动器的当前子目录。在子目录和子目录文件的分屏缓冲输出显示方面,建立一输出缓冲区BUFFER80*25来完成结果信息的分屏缓冲输出。二、程序功能本程序功能有分屏显示指定驱动器(缺省时为当前驱动器)、指定目录(缺省时为当时目录)中的指定文件(缺省时为*.*)及其所包含的子目录和子目录中的指定文件(缺省时为*.*)。对于子目录显示其子目录名及其属性,对于文件显示匹配的文件名、长度、建立时间及属性,最后输出匹配的文件个数及所包含的子目录个数。在查找过程中可按_Break或ESC键退出并返回当前驱动器及其当前目录,若指定驱动器不是当前驱动器则恢复指定驱动器的当前目录。下面举例说明隐藏子目录的查找。假定在驱动器A上建立子目录TEMP,用PCTOOLS或NORTON工具软件将其属性由10改为FF。这样在DOS状态下键入CDTEMP,系统会提示出错。作用CHKDSKA:,系统提示:CannotCHDIRtoA:TEMP,treepastthispointnotprocessed使用本程序,运行结果认为TEMP为一文件,其属性为HSRALD,表示这是一个子目录,可据此推猜其为一加密子目录,可进一步用NORTON工具软件解密。三、实现实例实例是在386兼容机、BORLANDC+3.1集成环境和DOS6.0操作系统支持下调试通过,实现源程序附后。需要指出的不足是,由于findfirst与findnext是通过查找目录项区实现其功能的,所以对一些与FAT表不符的隐藏文件及子目录的方法本程序不能奏效,建议结合CHKDSK使用本程序。另外,本文采用的封锁_Break的方法适用于查找过程,但在屏幕输出过程中不能做到封锁_Break中断。若需在查、屏幕输出过程中均封锁_Break中断,可采用ctrbrk函数另建一个_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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论