免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8627 | 回复: 6
打印 上一主题 下一主题

如何读取文件夹并生成树形结构? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-11 10:47 |只看该作者 |倒序浏览
高手请指定一二,谢谢

[ 本帖最后由 030802127 于 2007-10-11 10:50 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-10-11 14:20 |只看该作者
like this?
  1. C:.
  2. ├─(null)
  3. ├─.cpan
  4. │  ├─build
  5. │  │  ├─ANDK000
  6. │  │  ├─GAAS000
  7. │  │  │  └─blib
  8. │  │  │      ├─arch
  9. │  │  │      │  └─auto
  10. │  │  │      │      └─LWP
  11. │  │  │      └─lib
  12. │  │  │          └─auto
  13. │  │  │              └─LWP
  14. │  │  ├─GAAS001
  15. │  │  │  └─blib
  16. │  │  │      ├─arch
  17. │  │  │      │  └─auto
  18. │  │  │      │      └─URI
  19. │  │  │      └─lib
  20. │  │  │          └─auto
  21. │  │  │              └─URI
  22. │  │  ├─GBARR000
  23. │  │  │  └─blib
  24. │  │  │      ├─arch
  25. │  │  │      │  └─auto
  26. │  │  │      │      └─NetFTP
  27. │  │  │      └─lib
  28. │  │  │          └─auto
  29. │  │  │              └─NetFTP
  30. │  │  └─SZABGAB000
  31. │  │      └─blib
  32. │  │          ├─arch
  33. │  │          │  └─auto
  34. │  │          │      └─SpreadsheetParseExcel
  35. │  │          └─lib
  36. │  │              └─auto
  37. │  │                  └─SpreadsheetParseExcel
  38. │  └─sources
  39. │      ├─authors
  40. │      │  └─id
  41. │      │      ├─A
  42. │      │      │  └─AN
  43. │      │      │      └─ANDK
  44. │      │      ├─G
  45. │      │      │  ├─GA
  46. │      │      │  │  └─GAAS
  47. │      │      │  └─GB
  48. │      │      │      └─GBARR
  49. │      │      └─S
  50. │      │          └─SZ
  51. │      │              └─SZABGAB
  52. │      └─modules
  53. ├─.DownloadManager
  54. ├─.gnupg
  55. ├─.jinit
  56. ├─.links
  57. ├─.p4qt
  58. ├─.ssh
  59. ├─.subversion
  60. │  └─auth
  61. │      ├─svn.simple
  62. │      ├─svn.ssl.server
  63. │      └─svn.username
  64. ├─.texmf
  65. │  ├─config
  66. │  │  └─web2c
  67. │  └─var
  68. │      ├─fonts
  69. │      │  └─map
  70. │      │      ├─dvipdfm
  71. │      │      │  └─updmap
  72. │      │      ├─dvips
  73. │      │      │  └─updmap
  74. │      │      └─pdftex
  75. │      │          └─updmap
  76. │      └─web2c
  77. ├─Contacts
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-10-11 14:44 |只看该作者

回复 #2 systemalgorithm 的帖子

对,大概就这个样子,请问用perl能实现吗?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2007-10-11 15:14 |只看该作者
any thing is possible

论坛徽章:
0
5 [报告]
发表于 2007-10-11 15:26 |只看该作者
原帖由 030802127 于 2007-10-11 14:44 发表
对,大概就这个样子,请问用perl能实现吗?


帮你写了一下。供参考:
#!/usr/bin/perl -w

# jim zhang @ 2007

use strict;

print "|___$ARGV[0]\n";
my @basenum = split/\//,$ARGV[0];
tree($ARGV[0]);

sub tree
{
        my $path=shift;
        my @files;
        opendir(THISDIR,$path);
        @files=readdir THISDIR;
        closedir THISDIR;
        my @number = split(/\//,$path);
        my $num = @number - @basenum;
        my $tab = "|   "x$num;
        my $tab1 = "|   "x($num+1);
        for(@files)
        {
                next if(/^\.$/);
                next if(/^\.\.$/);
                if(-d $path.'/'.$_)
                {
                        print "$tab1\|___$_\n";
                        tree($path.'/'.$_);
                }
                else
                {
                        print "$tab1\|___$_\n";
                }
        }
        return;
}

论坛徽章:
0
6 [报告]
发表于 2007-10-13 10:49 |只看该作者
&printDirTree('TestDir');

sub printDirTree {
    my $curr_dir = $_[0];
   
    # print the 'root' dir
    if (!$_[1]) {
        print "$curr_dir\n" ;
        $_[1] = '';
    }
   
    # get all entries in current dir except '.' '..'
    opendir DIR, $curr_dir or die "Cannot open $curr_dir: $!\n";
    my @files = grep { !/^(\.|\.\.)$/ } (readdir DIR);
    closedir DIR;
   
    for (0..$#files) {
        my $pre = $_[1];
        
        if ($_ < $#files) {
            print $pre, '├─', $files[$_], "\n";
            $pre .= '│  ';
        }
        else {
            print $pre, '└─', $files[$_], "\n";;
            $pre .= '    ';
        }
        
        if (-d "$curr_dir/$files[$_]") {
            &printDirTree("$curr_dir/$files[$_]", $pre);
        }
    }
}


在Win下和tree的图形效果一致.

TestDir
├─Dir_1_1
│  ├─Dir_2_1
│  │  ├─input.txt
│  │  └─Copy of input.txt
│  ├─Dir_2_2
│  ├─input.txt
│  ├─Copy of input.txt
│  └─Z1
│      └─Z2
├─Dir_1_2
│  ├─Dir_2_1
│  │  └─input.txt
│  ├─Dir_2_2
│  │  └─Z1
│  │      └─Z2
│  └─Dir_2_3
├─Dir_1_3
│  ├─Dir_2_1
│  ├─Dir_2_2
│  │  ├─input.txt
│  │  └─Copy of input.txt
│  ├─input.txt
│  └─Copy of input.txt
└─Z1
    └─Z2

[ 本帖最后由 Lonki 于 2007-10-13 11:33 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-10-13 11:30 |只看该作者
perl -e "system('tree')"
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP