感觉这功能很酷!
它不是普通查找文件名的方式,因为即使目标文件名有变动,一般它也能找到的。
而且应该不是实时监视目录的(太占资源),比如打开几天前的快捷方式还是能定位到的。
最爽的是超快!这点是我们用Dir比不上的。
唯一的问题就是,当目标不在同一个盘符中,它就会胡乱定位——真讨厌!
但遗憾的是,这个功能是附加在快捷方式里的,一般无法调用。
(总不见得为了重新定位1万个文件,就要建1万个快捷方式吧?)所以想请教,如何在VB代码中实现这个功能?只有在自动定位实在找不到的情况下
(找不到就说找不到,不能像系统那样瞎指定一个),才将Dir作为最后的手段!
它不是普通查找文件名的方式,因为即使目标文件名有变动,一般它也能找到的。
而且应该不是实时监视目录的(太占资源),比如打开几天前的快捷方式还是能定位到的。
最爽的是超快!这点是我们用Dir比不上的。
唯一的问题就是,当目标不在同一个盘符中,它就会胡乱定位——真讨厌!
但遗憾的是,这个功能是附加在快捷方式里的,一般无法调用。
(总不见得为了重新定位1万个文件,就要建1万个快捷方式吧?)所以想请教,如何在VB代码中实现这个功能?只有在自动定位实在找不到的情况下
(找不到就说找不到,不能像系统那样瞎指定一个),才将Dir作为最后的手段!
这时,原来的快捷方式都失效了。
如果是实时更新的话,不会出现这样的情况!只有一个可能,在创建快捷方式的时候记录了部分文件特征。
当“查找目标”时先测试一下目标是否存在,若不存在,则根据保留的特征在靠近的几个目录里搜索。其实这些功能,VB的Dir也是能搞定的,但致命弱点——速度!!!
如果用FindFile之类的API的话,真的很烦诶:(
而且,文件特征要取哪些?取多少才够辨别?对不同类型文件是否要取不同特征?
如果再用VB代码来对比的话,还是那个致命点——速度!!!猜想,可能“查找目标”功能有单独调用的可能,因为在系统的很多地方都能看见其效果(如Windows Media Player)
那样的话,是否意为着,VB可以调用这样一个“未公开”的API ???要知道在imagehlp.dll里的Search File API,一句话搞定,那个简洁、那个效率,绝对是VB代码和FindFileFirst API做不到的:) (虽然可能在内部它使用了FindFile,但封装在系统库中,总比用VB代码写一遍强吧?)
Dim r As Long
FindFile = String(1024, Chr(0))
r = SearchTreeForFile(RootPath, FileName, FindFile)
If r > 0 Then
FindFile = Split(FindFile, Chr(0))(0)
Else
FindFile = "not find"
End If
Exit Function
End FunctionPrivate Sub Command1_Click()
MsgBox FindFile("c:\", "win.ini")
End Sub
MsgBox FindFile("c:\", "win.int")
End Sub
而SearchTreeForFile恐怕只对照文件名吧?那样的话对于01.mp3之类的基本就没啥用处了。
或者目标文件改名了而你又不知道新名字怎么办?可快捷方式却不一样!