求助,如果构建目录树

软件和网站开发以及相关技术探讨
回复
sharp_minminzhu
帖子: 67
注册时间: 2009-11-12 20:27

求助,如果构建目录树

#1

帖子 sharp_minminzhu » 2010-07-05 10:55

仿照书本弄了一个目录树显示程序,但是不够好,要怎么样才能弄成像pstree命令那样的风格,即属于同一层次的都用竖线串起来?

原程序如下:

代码: 全选

#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>

void printdir(char *dir,int depth)
{
	DIR *dp;	
	struct dirent *entry;	
	struct stat statbuf;	
	long int curdir;
	
	if(!(dp=opendir(dir)))	
	{
		fprintf(stderr,"cannot open directory: %s\n",dir);
		return;
	}
	
	chdir(dir);
	while(entry=readdir(dp))	
	{		
		lstat(entry->d_name,&statbuf);	
		if(S_ISDIR(statbuf.st_mode))	
		{
			if(strcmp(".",entry->d_name)==0 || strcmp("..",entry->d_name)==0)
				continue;
			printf("%*s|-%s-\n",depth,"",entry->d_name);			
			printdir(entry->d_name,depth+strlen(entry->d_name)+4);	
		}
		else
			printf("%*s|-%s\n",depth,"",entry->d_name);
	}
	chdir("..");	
	closedir(dp);	
}

int main(int argc,char** argv)
{
	char *topdir=".";
	if(argc>=2)
		topdir=argv[1];	
	printdir(topdir,0);
	return 0;
}

:em20
sharp_minminzhu
帖子: 67
注册时间: 2009-11-12 20:27

Re: 求助,如果构建目录树

#2

帖子 sharp_minminzhu » 2010-07-05 10:57

效果如下:

代码: 全选

|-uninstall
|-README
|-legal-
         |-LICENSE.RSA
         |-LICENSE.zlib
         |-LICENSE.distorm_copying.sig
         |-LICENSE.gsoap
         |-LICENSE.sha
         |-LICENSE.bsd
         |-LICENSE.distorm_copying
         |-LICENSE.md5
         |-LICENSE.apache
         |-LICENSE.pcre
         |-LICENSE.dazuko
|-bin-
       |-solaris_sparc-
                        |-aepack.so
                        |-avgu_stats
                        |-antivir_start
                        |-aeemu.so
                        |-aeset.dat
                        |-libgcc_s.so.1
                        |-libdazukoSolaris9.so
                        |-dazuko.conf
                        |-libsavapi3.so
                        |-savapi
                        |-aelidb.dat
                        |-aevdf.dat
                        |-aescn.so
                        |-avgu_stats.lck
                        |-avguard.bin
                        |-aehelp.so
                        |-aegen.so
                        |-libdazukoSolaris10.so
                        |-aeoffice.so
                        |-avlinfo
                        |-aevdf.so
                        |-avupdate.bin
                        |-aerdl.so
                        |-dazuko_5.9
                        |-dazuko_5.10
                        |-avverifier
                        |-avguard-scanner
                        |-aecore.so
                        |-antivir_start.real
                        |-aebb.so
                        |-aeheur.so
                        |-avsavapi-super
                        |-aescript.so
                        |-avupdate_msg.avr
                        |-aesbx.so
                        |-avguard-ondemand-mgmt
                        |-avscan
       |-linux_glibc22-
                        |-aepack.so
                        |-avgu_stats
                        |-antivir_start
                        |-aeemu.so
                        |-aeset.dat
                        |-libsavapi3.so
                        |-savapi
                        |-aelidb.dat
                        |-aevdf.dat
                        |-aescn.so
                        |-avgu_stats.lck
                        |-avguard.bin
                        |-aehelp.so
                        |-aegen.so
                        |-aeoffice.so
                        |-avlinfo
                        |-aevdf.so
                        |-avupdate.bin
                        |-aerdl.so
                        |-avverifier
                        |-avguard-scanner
                        |-aecore.so
                        |-antivir_start.real
                        |-aebb.so
                        |-aeheur.so
                        |-libdazuko3compat2.so
                        |-avsavapi-super
                        |-aescript.so
                        |-libdazuko2.so
                        |-avupdate_msg.avr
                        |-aesbx.so
                        |-avguard-ondemand-mgmt
                        |-avscan
|-contrib-
           |-dazuko-
                     |-dazukofs-3.0.0-rc4_2.6.18.tar.gz
                     |-supported_distros
                     |-dazukofs-3.0.0-rc4_2.6.24.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.27_ub_os11.1.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.29-
                                                  |-event.h
                                                  |-test-
                                                          |-lib-
                                                                 |-dazukofs.h
                                                                 |-LICENSE.LGPL-2.1
                                                                 |-dazukofs.c
                                                                 |-Makefile
                                                          |-showfiles.c
                                                          |-Makefile
                                                          |-LICENSE.GPL-2
                                                  |-ign_dev.o
                                                  |-dazukofs.h
                                                  |-.file.o.cmd
                                                  |-README
                                                  |-Module.symvers
                                                  |-.dentry.o.cmd
                                                  |-.mmap.o.cmd
                                                  |-dev.o
                                                  |-group_dev.o
                                                  |-mmap.c
                                                  |-inode.o
                                                  |-dev.c
                                                  |-file.c
                                                  |-event.c
                                                  |-inode.c
                                                  |-super.c
                                                  |-dev.h
                                                  |-dentry.c
                                                  |-dazukofs.ko
                                                  |-group_dev.c
                                                  |-.tmp_versions-
                                                                   |-dazukofs.mod
                                                  |-dazukofs.mod.o
                                                  |-.event.o.cmd
                                                  |-.ign_dev.o.cmd
                                                  |-.dev.o.cmd
                                                  |-dazukofs.mod.c
                                                  |-super.o
                                                  |-.ctrl_dev.o.cmd
                                                  |-dentry.o
                                                  |-.super.c.swp
                                                  |-.group_dev.o.cmd
                                                  |-.dazukofs.o.cmd
                                                  |-event.o
                                                  |-mmap.o
                                                  |-.dazukofs.mod.o.cmd
                                                  |-.super.o.cmd
                                                  |-.dazukofs.ko.cmd
                                                  |-dazukofs.o
                                                  |-ctrl_dev.c
                                                  |-Makefile
                                                  |-file.o
                                                  |-.inode.o.cmd
                                                  |-modules.order
                                                  |-dazukofs_fs.h
                                                  |-.file.c.swp
                                                  |-ctrl_dev.o
                                                  |-CHANGELOG
                                                  |-ign_dev.c
                                                  |-LICENSE.GPL-2
                     |-dazukofs-3.0.0-rc4_2.6.18_RHES5.2.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.29.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.16_SLES10SP2.tar.gz
                     |-install_dazuko.sh
                     |-dazukofs-3.0.0-rc4_2.6.26.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.24_Ubuntu8.04.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.22_Ubuntu7.10.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.20.tar.gz
                     |-dazukofs-3.0.0-rc4_2.6.16_SLES10SP1.tar.gz
           |-applet-
                     |-README
                     |-LICENSE
                     |-avira-guard-applet
                     |-install.sh
                     |-avira-guard-applet.c
                     |-extra-
                              |-avguard.conf
                              |-popup_message.sh
                     |-data-
                             |-avira-guard-icon.png
                             |-avira-guard-closed.png
                             |-AvGuardApplet.server
                             |-gnome-panel-avira.png
                             |-avira-guard-open.png
                     |-Makefile
|-LICENSE
|-doc-
       |-antivir_personal_en.txt
       |-avupdater.txt
       |-antivir_server_and_professional_de.pdf
       |-antivir_personal_de.txt
       |-antivir_server_and_professional_de.txt
       |-antivir_server_and_professional_en.pdf
       |-antivir_server_and_professional_en.txt
       |-antivir_personal_en.pdf
       |-antivir_personal_de.pdf
|-install
|-README.uninstall
|-.installrc
|-hbedv_key
|-install_list_guard
|-uninstall_smcplugin.sh
|-LICENSE.DE
|-etc-
       |-file_list
       |-avupdate.conf
       |-avguard.conf
       |-dir_list
       |-avscan.conf
       |-avguard-scanner.conf
       |-run.inf
|-script-
          |-avguard_post.sh
          |-avira_start.sh.template
          |-rcscript
          |-echo_sunos
          |-avguard_start.sh
          |-avguard_restart.sh
          |-post_install.sh
          |-savapi3_post.sh
          |-start_guard_upgrade.sh
          |-sh.avinstall
          |-savapi3_reload.sh
          |-write_fstab.sh
          |-avupdate.template
          |-avguard_stop.sh
          |-smcagent_reload.sh
          |-getsysteminfo
          |-avguardkey_post.sh
|-build.dat
|-vdf-
       |-vbase019.vdf
       |-vbase023.vdf
       |-vbase008.vdf
       |-vbase018.vdf
       |-vbase028.vdf
       |-vbase006.vdf
       |-vbase024.vdf
       |-vbase014.vdf
       |-vbase001.vdf
       |-vbase016.vdf
       |-vbase021.vdf
       |-vbase013.vdf
       |-vbase022.vdf
       |-vbase015.vdf
       |-vbase029.vdf
       |-vbase017.vdf
       |-vbase007.vdf
       |-vbase010.vdf
       |-vbase000.vdf
       |-vbase030.vdf
       |-vbase011.vdf
       |-vbase003.vdf
       |-vbase004.vdf
       |-vbase012.vdf
       |-vbase026.vdf
       |-vbase009.vdf
       |-vbase002.vdf
       |-vbase027.vdf
       |-vbase005.vdf
       |-vbase025.vdf
       |-vbase020.vdf
       |-vbase031.vdf
|-AV_WKS_PERS
|-smcpkg-
          |-src-
                 |-antivir_start.c
          |-libuxsrv.so.linux_glibc22
          |-en-
                |-uxwks.dll
                |-uxwks-upd.conf
                |-uxwks.conf
          |-cert-
                  |-cacert.pem
                  |-client.jks
                  |-server.pem
                  |-cacert.jks
          |-libuxwks.so
          |-libuxsrv.so.solaris_sparc
          |-libuxwks.so.linux_glibc22
          |-scanparameters.txt
          |-setup.inf
          |-libuxwks.so.solaris_sparc

回复