• 全部
  • 问答

如何用c浏览磁盘文件

zzgfly 2004-06-10 05:17:10
如何用c浏览磁盘文件 然后把浏览到的文件根据目录的深度建立一个连接表
...全文
179 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
呆呆虫 2004-06-13
/********************************************************/
/* 用 途: 显示指定文件及其文件头上的若干个字符 */
/* 编译方法: 用下列命令编译连接可以得到XDIR.COM: */
/* tcc -mt xdir */
/* tlink c:\tc\lib\c0t+xdir,xdir,,c:\tc\lib\cs\lib /t */
/********************************************************/

#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <dir.h>
#include <stdlib.h>
#include <alloc.h>

/* 显示程序的使用方法 */
void help()
{
printf("Usage : list specified files and several characters in the head of file\n");
printf("Syntex : XDIR <filename or directory> <number of ASCII characters>\n");
printf("Example: XDIR *.C 30\n");
printf(" XDIR *.*\n");
}

/* 显示错误信息 */
void error()
{
printf("Error : File not found !!!\n");
help();
exit(0);
}

/* 列出指定的文件及其若干标志信息 */
void list(dir,len)
char *dir,*len;
{
struct ffblk f;
FILE *f1;
int attrib,slen;
char *temp,format[80];
struct { /* 定义文件建立日期的位段 */
unsigned day:5;
unsigned month:4;
unsigned year:7;
} *fdate;
struct { /* 定义文件建立时间的位段 */
unsigned sec:5; /* 两秒 */
unsigned min:6; /* 分 */
unsigned hour:5; /* 时 */
} *ftime;
char p[MAXPATH],*p1;
slen = atoi(len)+1; /* 取显示字符串的长度 */
if (slen==1) {
slen = 21; /* 缺省时为20个字符 */
itoa(20,len,10);
}
temp = malloc(slen); /* 为字符串分配内存空间 */
strcpy(p,dir);
if ((p1 = strrchr(p,'\\'))==NULL) p1=p;
attrib = FA_ARCH | FA_DIREC | FA_RDONLY; /* 文件的属性 */
if (findfirst(dir,&f,attrib)!=0) error(); /* 查找第一个有效的文件 */
do {
ftime = &f.ff_ftime;
fdate = &f.ff_fdate;
if (f.ff_attrib==FA_DIREC) { /* 子目录 */
strcpy(temp,"<DIR>");
itoa(20,len,10);
}
else if ((strstr(f.ff_name,".COM")!=NULL) || /* 二进制文件 */
(strstr(f.ff_name,".EXE")!=NULL) ||
(strstr(f.ff_name,".DLL")!=NULL) ||
(strstr(f.ff_name,".SYS")!=NULL) ||
(strstr(f.ff_name,".VBX")!=NULL) ||
(strstr(f.ff_name,".DRV")!=NULL) ||
(strstr(f.ff_name,".OBJ")!=NULL) ||
(strstr(f.ff_name,".BIN")!=NULL) ) {
strcpy(temp,"BINARY FILE !!!");
itoa(20,len,10);
}
else {
if (p1==p) p1[0]=0; else p1[1]=0;
if ((f1=fopen(strcat(p,f.ff_name),"rb"))!=NULL) {
fread(temp,slen,1,f1); /* 读文本文件的字符串 */
temp[slen] = '\0';
fclose(f1);
}
}
strcpy(format,"%-12s %8ld %04u-%02u-%02u %02u:%02u:%02u %-");
strcat(strcat(format,len),"s\n");
printf(format,f.ff_name,f.ff_fsize,
fdate->year+1980,fdate->month,fdate->day,
ftime->hour,ftime->min,ftime->sec,
temp);
} while (findnext(&f)!=-1);
free(temp);
}

/* 主程序 */
main(argc,argv)
int argc;
char *argv[];
{
printf("XDIR version 1.0 Copyright (c) 1995 Dong Zhanshan\n\n");
switch (argc) {
case 2 :
case 3 : list(argv[1],argv[2]);
break;
case 1 :
default: help();
break;
}
}
回复
boxban 2004-06-11
你问的这个问题与C无关
这依赖于运行的操作系统平台,不同的操作系统提供的API接口有所不同。
回复
Coolingverse 2004-06-10
你说的是tree命令的功能吗?观注中!
回复
zzgfly 2004-06-10
大家帮帮忙~~~
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-06-10 05:17
社区公告
暂无公告