发新话题
打印

[讨论]一道面试题 哪位高手能帮我再完善下

[讨论]一道面试题 哪位高手能帮我再完善下

议题作者:xiao2004
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

题目是:
    用纯SDK写一个简单的网络程序,目的是从服务端获取c盘目录树,然后在客户端用目录树显示出来

当时听到这题,觉得很简单,结果当时面试时花了3小时左右,因为我不会用TreeView控件,面试官就说写在文件中,但要有层次,比如
c
  windows
    system32
   1.txt
   2.txt
  temp
  boot.in
这个我倒是完成了,因为只要记住第几层就可以了.
写完后,面试官说要我回去完美一下,用树控件做成目录树.

没想到回家后,用了两天时间才写出来,以前用了N种方法都失败了.
其实有一种方法比较好使,用灰鸽那种形式,有目录时点进去才获取下一层目录树的内容.
但我们这里要一次全写入....结果就用了我两天,对自己的能力表示超级怀疑了.

附件

Network.rar (31 KB)

2006-4-22 13:48, 下载次数: 61

TOP

//如果是目录的话,就递归
    if(wfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)

刚刚一打开,就看到了错误代码,哈哈,wfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY显然是不对的,这样可不能得到正确目录,应该用wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY 位与吧
我是菜鸟,如有错误,请多多谅解,呵呵

TOP

没什么难度,用归递算,很快的,如果不想用归递,可用堆栈和链表消除归递.

1楼说的不错,详细的说就是:

你不能用==,因为文件属性是按位置位的.

比如文件夹属性是0100,如果普通的文件夹,属性当然是0100,你用==不会错,

可是有的文件夹还具有系统属性,可能是0110(第二个1是文件夹属性,第三个1是系统),你用==就肯定找不对了,因为0100绝对不等于0110.

而按位比较就不会错,只要是文件夹,第二位就是1.

*以上0100,0110纯属举例解释,和实际情况不同.

TOP

引用:
这里是引用第[2 楼]大内低手2006-05-05 17:09发表的:
没什么难度,用归递算,很快的,如果不想用归递,可用堆栈和链表消除归递.

1楼说的不错,详细的说就是:

你不能用==,因为文件属性是按位置位的.
.......
困难不在于取目录,而在于传后送依然保持树结构.
方法很多,在于优化.

TOP

引用:
这里是引用第[1 楼]still2006-05-03 00:55发表的:
//如果是目录的话,就递归
      if(wfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)

刚刚一打开,就看到了错误代码,哈哈,wfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY显然是不对的,这样可不能得到正确目录,应该用wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY 位与吧
我是菜鸟,如有错误,请多多谅解,呵呵
多谢,呵呵,这里没注意,面试前为止,还没使用过findfirstfile此类函数,当时调试时没发现,看有文件夹就进去了.浪费的时间主要在那个传送,这里没花啥时间.一个递归就过了.

TOP

发新话题