免费注册 查看新帖 |

Chinaunix

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

请教比较两个目录差异的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-20 23:07 |只看该作者 |倒序浏览
想比较两个目录(含子目录)的差异,即一个比另一个多了某个文件,或另一个少了某个目录~~
只想到一种办法,即先递归生成两个目录结构的文本描述(有序),如
a/
a/b
a/b/c
a/b/d
然后作比较,得出个像diff一样的结果来,再作接下来的处理……
编码时发现了点问题,生成有序的文本描述还挺难,我用ftw和alphasort都试过,
一般来说总是把子目录中的文件列在子目录之前,如下
a/b/c
a/b
应该是那个斜杠/的问题,这就导致了比较时先比出了子目录下的差异,想修补又发现
子目录不存在,昏~~
俺最后是先生成文本描述,在对文本排序,
才解决的(最后又改成了用scandir的递归,但我总觉得笨,怕目录太深出问题)

想请教一下dx们有没有什么好办法作目录的比较(当然要是有生成有序文本的办法也可,
由于scandir是用malloc的,俺怕目录深度使得内存分配失败,虽然没见过)

由于移植性的原因没法直接调用sort和diff,太ft了……

论坛徽章:
0
2 [报告]
发表于 2007-06-20 23:12 |只看该作者
把目录抽象一下,就成树了。比较两棵树吧。

[ 本帖最后由 langue 于 2007-6-20 23:14 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-06-20 23:39 |只看该作者
原帖由 langue 于 2007-6-20 23:12 发表
把目录抽象一下,就成树了。比较两棵树吧。


难点在"比较", 不在树

论坛徽章:
0
4 [报告]
发表于 2007-06-21 00:00 |只看该作者
原帖由 太平绅士 于 2007-6-20 23:39 发表


难点在"比较", 不在树


成立。
那么这应该是对算法的讨论。
可以先对树进行排序,然后遍历,比较各节点。遍历的方式有很多,典型的有一种被称作前序法 (preorder traversal) 的遍历法,这种方法比较常用。当然用 level-order 也可以。

[ 本帖最后由 langue 于 2007-6-21 00:03 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-06-21 02:00 |只看该作者
原帖由 langue 于 2007-6-20 23:12 发表
把目录抽象一下,就成树了。比较两棵树吧。


有点启发,我明天做做看先~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP