|
飘水
初级用户
积分 109
发帖 3
注册 2004-6-14
状态 离线
|
『楼 主』:
DOS下DIR命令的修改,那位高手帮帮忙啊
遇到了一个问题,请教各位高手:如果我要修改DOS下的DIR命令。使用高级语言编写和调试一个MYDIR命令。要求是:在信息多屏时,信息满一屏自动停止;可以控制前后翻屏查看文件信息;保留DOS的DIR命令的全部参数功能。
哪位高手指点一二,不胜感激啊![em27]
|
|
2004-6-14 00:00 |
|
|
晓欣
初级用户
积分 154
发帖 14
注册 2003-12-30
状态 离线
|
『第
2 楼』:
为什么要自己写呢?本来就有一个外部命令MORE可以实现这个功能啊
|
|
2004-6-15 00:00 |
|
|
bush
银牌会员
积分 2165
发帖 730
注册 2004-4-21
状态 离线
|
『第
3 楼』:
可以考虑建一个字符串数组,大小为屏幕显示的行数的N倍,(recalloc函数解决)
信息满一屏,就保存到数组一次,前后翻屏时,就是重新显示若干行的字符串。
自动停止;可以控制前后翻屏查看文件信 就是一个读键盘输入函数,根据读入的值取上翻或下翻。
大概如此!
|
|
2004-6-15 00:00 |
|
|
飘水
初级用户
积分 109
发帖 3
注册 2004-6-14
状态 离线
|
『第
4 楼』:
请问晓欣,是哪个外部命令more实现这个功能,能具体点么?谢了
|
|
2004-6-15 00:00 |
|
|
飘水
初级用户
积分 109
发帖 3
注册 2004-6-14
状态 离线
|
『第
5 楼』:
请问bush,你所说的建一个字符串数组,就是用recalloc函数解决么?这是turbo c 的库函数么?你能不能具体指点一二。谢谢!
|
|
2004-6-15 00:00 |
|
|
bush
银牌会员
积分 2165
发帖 730
注册 2004-4-21
状态 离线
|
『第
6 楼』:
try!
字符串数组:实际上是字符指针的指针。
因为字符型指针可以表示字符串,
字符型指针的指针就可以表示字符串数组了,
一屏显25行,因此可以定义大小为25的串数组
每增加一屏多25行,数组的大小也就增加25
realloc函数就是改变数组的大小,用法: void realloc (void* p,unsigned size) 把p指针所指的区域大小改为size;返回指向该内存区的指针。
不过,仔细想一下,这好像有点问题,过两天我写一试试看……
[此贴子已经被作者于2004-6-18 下午 11:40:10编辑过]
|
|
2004-6-18 00:00 |
|
|
bush
银牌会员
积分 2165
发帖 730
注册 2004-4-21
状态 离线
|
『第
7 楼』:
我用TC写了一个,mydir命令程序,只是大概演示了输出信息时上翻滚屏等操作,目前只能列表文件名,没有大小、时间等信息,(加上去并不难),
目前的问题是:
我是采用findfirst() findnext()两个函数来模仿DIR命令的作用的。
但是发现其局限性很大,也许是我的方法不对,还请各位点评一下。
#include
#include
int main(int argc,char*argv[])
{
unsigned short p,line,r,i,j,maxrow=20;
struct ffblk *fp;
char** row=(char**)malloc(20*4);
if(!row)
{
printf("out of memory!"
exit(1);
}
fp=(struct ffblk*)malloc(sizeof(struct ffblk));
if(!fp)
{
printf("out of memory!"
exit(1);
}
for(r=0;r<20;r++)
{
row[r]=(char*)malloc(80);
if(!row[r])
{
printf("out of memory!"
exit(1);
}
for(i=0;iff_name;i++)row[0]=fp->ff_name;
while(!findnext(fp))
{
if(r++==maxrow-1)
{
j=0;
maxrow+=20;
row=(char**)realloc(row,maxrow*4);
if(!row)
{
printf("out of memory!"
exit(1);
}
for(j=0;j<20;j++)
{
row[r+j]=(char*)malloc(80);
for(i=0;iff_name;i++)row[r]=fp->ff_name;
}
p=maxrow/20;
for(j=0;j<p-1
{
printf("Display page: %d\n",j+1);
for(i=0;i<20;i++)
printf("%s\n",row[j*20+i]);
printf("press U to uppage, E to end;other key continue..\n"
switch(i=getch())
{
case 'U':
case 'u':
if(j)j--;
break;
case 'E':
case 'e':
j=p-1;break;
default :
j++;
}
}
line=r%20;
printf("Display page: %d\n",j+1);
for(i=0;i<=line;i++)
printf("%s\n",row[j*20+i]);
printf("Total %d files in this folder.\n",r+1);
for(j=0;j<maxrow;j++)
free(row[j]);
free(row);
free(fp);
return 0;
}
|
|
2004-6-19 00:00 |
|