#这个是深度优先搜索
def find(*paths)
paths.collect!{|d| d.dup}
while file=paths.shift
catch(:prune) do
yield file.dup.taint
next unless File.exist? file
begin
if File.lstat(file).directory? then
d=Dir.open(file)
begin
for f in d
next if f=="." or f==".."
if File:: ALT_SEPARATOR and file=~/^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then
f=file+f
elsif file=="/" then
f="/"+f
else
f=File.join(file,f)
end
paths.unshift f.untaint #要变成广度优先,最小限度的修改paths.unshift改为paths.push
end
ensure
d.close
end
end
rescue Errno::ENOENT,Errno::EACCES
end
end
end
end
find('/home/season/桌面/linux'){|f| puts f}
def find(*paths)
paths.collect!{|d| d.dup}
while file=paths.shift
catch(:prune) do
yield file.dup.taint
next unless File.exist? file
begin
if File.lstat(file).directory? then
d=Dir.open(file)
begin
for f in d
next if f=="." or f==".."
if File:: ALT_SEPARATOR and file=~/^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then
f=file+f
elsif file=="/" then
f="/"+f
else
f=File.join(file,f)
end
paths.unshift f.untaint #要变成广度优先,最小限度的修改paths.unshift改为paths.push
end
ensure
d.close
end
end
rescue Errno::ENOENT,Errno::EACCES
end
end
end
end
find('/home/season/桌面/linux'){|f| puts f}
本文深入探讨了深度优先搜索(DFS)算法的具体实现过程,并通过一个详细的Ruby语言示例展示了如何遍历文件目录结构。该算法采用递归方式实现,能够有效地遍历文件夹及其子文件夹中的所有文件。
460

被折叠的 条评论
为什么被折叠?



